asyncio,任务在哪里执行?

asyncio, where Tasks are executed?

我是 asyncio 的新手。正在阅读 asyncio documentation,我不明白任务在哪里 运行。

import asyncio

async def query_api(url):
    #http://a.b.c takes 3 seconds
    #http://x.y.z takes 5 seconds

async def main():
    task1 = asyncio.create_task(query_api('http://a.b.c'))
    task2 = asyncio.create_task(query_api('http://x.y.z'))
    
    await task1
    await task2
    print ('Tasks Done')

asyncio.run(main())

This doc 表示 asyncio 在主线程中有一个事件循环 运行ning。

A​​syncIO 是 运行 concurrent 任务的框架。请注意,并发在这里并不意味着并行。

  • 在主线程中做task1和task2运行?如果是这样,他们一定不能 运行 并行,因为 CPU 一次只能做一件事?

是的。它们 运行 在同一个线程中(默认情况下),这意味着它们使用相同的 CPU。但诀窍是我们在做网络 I/O.

时不需要坚持 CPU

当 Task1 等待网络响应时,Task2 可以开始使用 CPU。

  • 任务完成会在 8 秒后或更早出现?

任务应在 8 秒前完成

如果您需要您的任务 运行 在主线程之外,可以使用 asyncIO 使用多线程或多处理。