Остановка кокотка раздвоенной сопрограммы - PullRequest
0 голосов
/ 19 сентября 2018

У меня есть сопрограмма, ожидающая повышения сигнала:

@cocotb.coroutine
def wait_for_rise(self):
    yield RisingEdge(self.dut.mysignal)

Я запускаю ее в своей «основной» тестовой функции, например:

mythread = cocotb.fork(wait_for_rise())

Я хочуостановите его через некоторое время, даже если повышение сигнала не произойдет.Я пытался «убить» его:

mythread.kill()

Но случается исключение:

Send raised exception: 'RunningCoroutine' object has no attribute '_join'
                       File "/opt/cocotb/cocotb/decorators.py", line 121, in send
                         return self._coro.send(value)
                       File "/myproject.py", line 206, in i2c_read
                         wTXDRwthread.kill()
                       File "/opt/cocotb/cocotb/decorators.py", line 151, in kill
                         cocotb.scheduler.unschedule(self)
                       File "/opt/cocotb/cocotb/scheduler.py", line 453, in unschedule
                         if coro._join in self._trigger2coros:

Есть ли решение, как правильно остановить разветвленную сопрограмму?

1 Ответ

0 голосов
/ 12 декабря 2018

Очень похоже, что это та же проблема, что и в https://github.com/potentialventures/cocotb/issues/650 - вы можете подписаться на проблему, чтобы получать уведомления об изменении ее статуса.

...