Asyncio Как вы используете run_forever?Python

Программы на Python
Ответить
Anonymous
 Asyncio Как вы используете run_forever?

Сообщение Anonymous »

Что я хочу сделать:
  • иметь асинхронный цикл событий, который разворачивается
  • этот цикл передается различным классам в моей системе для планирования сопрограмм
  • этот цикл также используется для обработки ответов на события (т. е. у меня есть очередь, некоторый код обработки событий поместит элемент в эту очередь, и отдельные сопрограммы, которые ждут get() в этой очереди для обработки этих значений)
  • существует основной поток, который «владеет» циклом и отвечает за его создание, и во время завершения работы системы он отменит все запущенные задачи в цикле, а также закроет и остановит цикл (чистое завершение работы)
Насколько я понимаю, из-за пункта 3 что-то должно вызывать run_forever() в цикле, чтобы гарантировать, что задачи будут запланированы на петля. Но если я вызываю run_forever(), то мой основной поток блокируется и никогда не завершается.

Что я пробовал:

Создать поток, пройти в цикл, а затем вызвать run_forever в потоке. Однако это означает, что мои модульные тесты никогда не завершаются. Суть:

def __start_background_loop(loop):
def run_forever(loop):
loop.run_forever()

# because run_forever() will block the current thread, we spawn
# a subthread to issue that call in.
thread = Thread(target=run_forever, args=(loop,))
thread.start()

def __end_background_loop(loop):
for task in Task.all_tasks(loop):
task.cancel()
loop.stop()


Подробнее здесь: https://stackoverflow.com/questions/516 ... un-forever
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»