asyncio,此事件循环已经运行问题

问题描述 投票:0回答:1

在线程内运行异步事件循环是个好主意吗?

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

有什么建议吗?

python python-asyncio event-loop
1个回答
0
投票
您收到的

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
事件循环在某些情况下可能是一种有效的方法,特别是当您需要与其他操作同时执行异步任务时。

© www.soinside.com 2019 - 2024. All rights reserved.