如何在 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() 永远不会 运行.

A​​syncio 是所谓的 non-preemptive 任务调度程序。

也就是说,它不能自己在任务之间来回切换,它需要调用的函数主动放弃(=yield)优先级。

由于您的函数不是异步的(=其中没有任何命令会等待带有 await 关键字的内容),它只是运行完成,然后返回给异步调度程序。

您描述问题的方式听起来不太适合异步编程,而是需要多线程甚至多处理(如果您希望从 'simultaneous' 计算中获得加速)。