1 回答
TA贡献1831条经验 获得超10个赞
time是同步库,并在执行时阻塞整个主线程。如果您的程序中有这样的阻塞调用,则可以避免使用线程或进程池执行器阻塞(您可以在此处阅读相关信息)。或者,将 “更改为”使用“而不是blocking_iterationasyncio.sleeptime.sleep
更新。为了清楚起见,这里是非阻塞版本,它与默认执行程序一起使用。请注意,现在没有loop.run_in_executorblocking_iterationasync
import asyncio
import concurrent.futures
import time
def blocking_iteration():
time.sleep(1)
async def long_running():
loop = asyncio.get_event_loop()
for i in range(5):
print(f"sleeping {i}")
await loop.run_in_executor(None, blocking_iteration)
async def poll_run():
task = asyncio.create_task(long_running())
while not task.done():
print("before polling")
await asyncio.sleep(0.05)
print("polling")
print(task.result())
if __name__ == '__main__':
loop = asyncio.get_event_loop()
loop.run_until_complete(poll_run())
loop.close()
添加回答
举报