【发布时间】:2021-10-27 22:08:51
【问题描述】:
queue = []
async def funcA():
r = random.randint(0, 1000)
i = 0
for i in range(10000000):
pass
print(r)
queue.append(r)
asyncio.create_task(funcb(r))
async def funcb(r):
i = 0
for i in range(100000000):
pass
print(r, "XX")
queue.pop()
async def main():
for i in range(10):
await funcA()
print(queue)
if __name__ == "__main__":
asyncio.run(main())
如何让funcb() 同时运行?在此代码中,funcb() 仅在 funcA() 的所有调用都执行完毕后运行。我希望 funcB() 与 funcA() (在相同或不同的线程上)同时运行。这里如果funcA() 无限运行,那么funcB() 将永远不会运行。
【问题讨论】:
-
它们都是阻塞函数,它们不会在内部产生/等待任何东西。即使你一起启动它们,它们也只能一个接一个地执行。对于并行执行,您需要线程。
-
您也许可以使用
run_in_executor,但正如其他人所说,这不是您真正想用 asyncio 做的事情 -
如果您发现我的回答有帮助,我们不介意收到您的回复并打勾。
标签: python python-3.x asynchronous async-await python-asyncio