async/await 这个协程 异步为什么对磁盘 io 无效?
import asyncio
async def wr1():
# f = open('text1.txt','w')
# for x in range(1,39999999):
# f.write('12345ddd')
# f.close()
f = open('text3.txt','r')
print(f.read())
f.close()
async def wr2(): # f = open('text2.txt','w') # for x in range(1,79999999): # f.write('23456fff') # f.close()
for x in range(1,519999):
print('xx')
async def wr3(): # f = open('text3.txt','w') # for x in range(1,99999999): # f.write('34567ggg') # f.close()
for x in range(1,919999):
print('yy')
def demo4():
async def washing1():
await wr1()
async def washing2():
await wr2()
async def washing3():
await wr3()
# 1. 创建一个事件循环
loop = asyncio.get_event_loop()
# 2. 将异步函数加入事件队列
tasks = [
washing1(),
washing2(),
washing3(),
]
# 3. 执行事件队列, 直到最晚的一个事件被处理完毕后结束
loop.run_until_complete(asyncio.wait(tasks))
# 4. 如果不再使用 loop, 建议养成良好关闭的习惯
loop.close()
if name == 'main': start = time()
demo4()
end = time()
print('elapsed time = ' + str(end - start))
第一段是读取磁盘,第二第三段是打印。按道理遇到 io,dma 交出总线,cpu 就空运转直到有数据才工作,所以 wr1 应该和 2 或 3 一块执行才对的,而实际情况不是这样的,是跟单线程同步执行一样的所需时间