在线程内运行异步事件循环是个好主意吗?
import asyncio
import time
from sample_threading import parallel
loop = asyncio.new_event_loop()
async def fn(p):
for i in range(5):
print(i)
time.sleep(5)
print("done")
@parallel
def th(p):
loop.run_until_complete(fn(p))
th(1)
th(2)
th(3)
上面的代码给出错误
raise RuntimeError('This event loop is already running')
RuntimeError: This event loop is already running
有什么建议吗?
error
消息,This event loop is already running,
是因为当您尝试运行已在运行的 asyncio
事件循环时。在您的代码中,您正在使用 asyncio.new_event_loop()
创建一个新的事件循环,但您没有明确将其设置为当前事件循环。
import asyncio
import time
from sample_threading import parallel
async def fn(p):
for i in range(5):
print(i)
# instead of time.sleep, you ensure that the sleep operation is non-
# blocking and allows other tasks to run concurrently.
await asyncio.sleep(5)
print("done")
@parallel
def th(p):
asyncio.run(fn(p))
th(1)
th(2)
th(3)
在
asyncio
内运行 thread
事件循环在某些情况下可能是一种有效的方法,特别是当您需要与其他操作同时执行异步任务时。