- иметь асинхронный цикл событий, который разворачивается
- этот цикл передается различным классам в моей системе для планирования сопрограмм
- этот цикл также используется для обработки ответов на события (т. е. у меня есть очередь, некоторый код обработки событий поместит элемент в эту очередь, и отдельные сопрограммы, которые ждут get() в этой очереди для обработки этих значений)
- существует основной поток, который «владеет» циклом и отвечает за его создание, и во время завершения работы системы он отменит все запущенные задачи в цикле, а также закроет и остановит цикл (чистое завершение работы)
Что я пробовал:
Создать поток, пройти в цикл, а затем вызвать 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
Мобильная версия