【发布时间】:2021-06-24 07:53:45
【问题描述】:
请帮我找出错误在哪里,我想并行运行两个函数。太棒了
import asyncio
import time
async def test1():
for i in range(10):
print(f"First function {i}")
async def test2():
for i in range(10):
print(f"Second function {i}")
async def main():
print(f"started at {time.strftime('%X')}")
F = asyncio.create_task(test1())
S = asyncio.create_task(test2())
tasks = (F, S)
await asyncio.gather(*tasks)
print(f"finished at {time.strftime('%X')}")
asyncio.run(main())
相反,我得到的输出与并行执行没有任何关系:
started at 10:42:53
First function 0
First function 1
First function 2
First function 3
First function 4
First function 5
First function 6
First function 7
First function 8
First function 9
Second function 0
Second function 1
Second function 2
Second function 3
Second function 4
Second function 5
Second function 6
Second function 7
Second function 8
Second function 9
finished at 10:42:53
【问题讨论】:
-
你的异步函数不会等待任何东西。这意味着它们永远不会将控制权交还给事件循环。这就是它们同步运行的原因。您可以添加
await asyncio.sleep(0),但如果您的任务都是 CPU 密集型的,那么multiprocessing或concurrent.futures.ProcessPoolExecutor将提供比 asyncio 更好的价值。
标签: python-3.x debugging concurrency parallel-processing python-asyncio