我正在做一些例子来了解它是如何异步工作的。checkpoint
我阅读了 Trio 文档,我认为每次只能在循环中执行一个任务,并且每次scheduler
决定将执行哪个任务。
我做了一个示例来测试它,在三重奏示例中,我没有在我生成的子节点中使用任何检查点,nursery
但是这个示例比同步版本快两倍。
异步示例:
import time
import trio
results = []
async def sum_numbers(first, last):
result = 0
for i in range(first, last):
result += i
results.append(result)
async def main():
start_time = time.time()
async with trio.open_nursery() as nursery:
nursery.start_soon(sum_numbers, 0, 50000000)
nursery.start_soon(sum_numbers, 50000000, 100000000)
print(sum(results))
print("Total time:", time.time() - start_time)
trio.run(main)
结果:
4999999950000000
Total time: 4.150018930435181
同步示例:
import time
start_time = time.time()
result = 0
for i in range(0, 100000000):
result += i
print(result)
print("Total time:", time.time() - start_time)
结果:
4999999950000000
Total time: 8.002650737762451
为什么?我希望在同一时间,因为我没有在我的代码中使用任何检查点。似乎有 2 个线程同时运行或子函数中是否有任何 I/O?