【发布时间】:2021-02-07 13:27:22
【问题描述】:
我有一个应用程序可以将协程添加到已经运行的事件循环中。 这些协程的参数取决于 I/O,并且在我最初使用 loop.run_forever() 启动事件循环时不可用,因此我稍后添加任务。为了演示这个现象,下面是一些示例代码:
import asyncio
from threading import Thread
from time import sleep
loop = asyncio.new_event_loop()
def foo():
loop.run_forever()
async def bar(s):
while True:
await asyncio.sleep(1)
print("s")
#loop.create_task(bar("A task created before thread created & before loop started"))
t = Thread(target=foo)
t.start()
sleep(1)
loop.create_task(bar("secondary task"))
奇怪的行为是,当调用 loop.run_forever() 时循环中至少有一个任务时,一切都按预期工作。即当注释行没有被注释掉时。
但是当它被注释掉时,如上所示,没有打印任何内容,并且似乎我无法将任务添加到 event_loop。我应该避免在不添加单个任务的情况下调用 run_forever() 吗?我不明白为什么这应该是一个问题。在 event_loop 运行后添加任务是标准的,为什么空壳会成为问题?
【问题讨论】:
标签: python python-asyncio