如何在 Python 中使用 Asyncio 同时 运行 两个函数?
How do I run two functions at once using Asyncio in Python?
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()
运行s 仅在 funcA()
的所有调用完成后执行。我希望 funcB()
到 运行 与 funcA()
同时发生(在相同或不同的线程上)。这里如果 funcA()
运行 无限,那么 funcB()
永远不会 运行.
Asyncio 是所谓的 non-preemptive 任务调度程序。
也就是说,它不能自己在任务之间来回切换,它需要调用的函数主动放弃(=yield)优先级。
由于您的函数不是异步的(=其中没有任何命令会等待带有 await
关键字的内容),它只是运行完成,然后返回给异步调度程序。
您描述问题的方式听起来不太适合异步编程,而是需要多线程甚至多处理(如果您希望从 'simultaneous' 计算中获得加速)。
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()
运行s 仅在 funcA()
的所有调用完成后执行。我希望 funcB()
到 运行 与 funcA()
同时发生(在相同或不同的线程上)。这里如果 funcA()
运行 无限,那么 funcB()
永远不会 运行.
Asyncio 是所谓的 non-preemptive 任务调度程序。
也就是说,它不能自己在任务之间来回切换,它需要调用的函数主动放弃(=yield)优先级。
由于您的函数不是异步的(=其中没有任何命令会等待带有 await
关键字的内容),它只是运行完成,然后返回给异步调度程序。
您描述问题的方式听起来不太适合异步编程,而是需要多线程甚至多处理(如果您希望从 'simultaneous' 计算中获得加速)。