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。
- 在主线程中做
task1
和task2
运行?如果是这样,他们一定不能 运行 并行,因为 CPU 一次只能做一件事?
Tasks Done
在 8 秒后或更早出现?
AsyncIO 是 运行 concurrent
任务的框架。请注意,并发在这里并不意味着并行。
- 在主线程中做task1和task2运行?如果是这样,他们一定不能 运行 并行,因为 CPU 一次只能做一件事?
是的。它们 运行 在同一个线程中(默认情况下),这意味着它们使用相同的 CPU。但诀窍是我们在做网络 I/O.
时不需要坚持 CPU
当 Task1 等待网络响应时,Task2 可以开始使用 CPU。
- 任务完成会在 8 秒后或更早出现?
任务应在 8 秒前完成
如果您需要您的任务 运行 在主线程之外,可以使用 asyncIO 使用多线程或多处理。
我是 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。
- 在主线程中做
task1
和task2
运行?如果是这样,他们一定不能 运行 并行,因为 CPU 一次只能做一件事? Tasks Done
在 8 秒后或更早出现?
AsyncIO 是 运行 concurrent
任务的框架。请注意,并发在这里并不意味着并行。
- 在主线程中做task1和task2运行?如果是这样,他们一定不能 运行 并行,因为 CPU 一次只能做一件事?
是的。它们 运行 在同一个线程中(默认情况下),这意味着它们使用相同的 CPU。但诀窍是我们在做网络 I/O.
时不需要坚持 CPU当 Task1 等待网络响应时,Task2 可以开始使用 CPU。
- 任务完成会在 8 秒后或更早出现?
任务应在 8 秒前完成
如果您需要您的任务 运行 在主线程之外,可以使用 asyncIO 使用多线程或多处理。