Я пытаюсь смоделировать систему, использующую asyncio и цикл событий. Я обнаружил, что если я создам цикл событий и запущу его с помощью команды «Запустить навсегда», он не будет обрабатывать новые задачи, если только в нем нет незавершенных задач.
Код: Выделить всё
import asyncio, threading, time
loop = asyncio.new_event_loop()
Это мой цикл, потом я его запускаю
Код: Выделить всё
thread = threading.Thread( target = loop.run_forever)
thread.start()
На мой взгляд, здесь должен быть работающий цикл событий, и я мог бы отправлять в него новые задачи.
Код: Выделить всё
async def dostuff( i ):
await asyncio.sleep(5)
print("doing something", i)
loop.create_task( dostuff(0) )
Он никогда не запустится, если в цикле нет незавершенной задачи.
Код: Выделить всё
async def main(self, ):
print("keep alive running")
while True:
await asyncio.sleep(0.1)
Затем я запускаю цикл.
Код: Выделить всё
thread = threading.Thread( target = loop.run_forever)
loop.create_task( main() )
thread.start()
Теперь цикл.create_task создаст и запустит задачу. Почему цикл событий не продолжает обрабатывать задачи, если нет запущенных задач?