使用Python的asyncio,不太熟练,按照目前的理解,如果向 01.txt, 02.txt, 03.txt, 04.txt分别写入1百万条数据,如果按顺序执行,每个文件写入完成用时2秒,那总共要8秒。。。。如果用asyncio,是不是就会少很多?用时一定会少于8秒吧。。。
我写了一段程序,实际运行后,和按顺序写的用时基本一样。。。。请高手帮忙答疑,谢谢!
import asyncio
import time, string
now = lambda: time.time()
async def do_some_work(x):
print('Waiting: ', x)
await asyncio.sleep(x)
return 'Done after {}s'.format(x)
async def do_write_file(filename):
print('Waiting: ', filename)
fp = open(filename, "w")
str = string.ascii_letters
starttime = time.time()
for inum in range(0, 1000000):
straa = "%05d" % inum
fp.write(straa + " " + str + "\n")
fp.close()
endtime = time.time()
print(endtime-starttime)
return filename
start = now()
coroutine1 = do_write_file("01.txt")
coroutine2 = do_write_file("02.txt")
coroutine3 = do_write_file("03.txt")
coroutine4 = do_write_file("04.txt")
tasks = [
asyncio.ensure_future(coroutine1),
asyncio.ensure_future(coroutine3),
asyncio.ensure_future(coroutine2),
asyncio.ensure_future(coroutine4)
]
loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait(tasks))
for task in tasks:
print('Task ret: ', task.result())
print('TIME: ', now() - start)
###### 运行结果及报错内容
Waiting: 01.txt
1.6256601810455322
Waiting: 03.txt
1.594179391860962
Waiting: 02.txt
1.5777881145477295
Waiting: 04.txt
1.6811869144439697
Task ret: 01.txt
Task ret: 03.txt
Task ret: 02.txt
Task ret: 04.txt
TIME: 6.540212154388428
异步,需要考虑的问题核心在于机器,你的机器配置如何,比如核心多少,内存多少,磁盘IO速率如何。
这些都是影响的关键。
Intel(R) Xeon(R) CPU E5-2670 v3 @ 2.30GHz 2.30 GHz / 24核 / 32G内存
操作系统是Win10
===============