AIOFiles比正常的文件操作花费更长的时间

2024-06-02 05:20:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个问题,我是python异步世界的新手,我编写了一些代码来测试asyncio的功能,我创建了10个随机内容的文件,名为file1.txt, file2.txt, ..., file10.txt

这是我的代码:

import asyncio
import aiofiles
import time

async def reader(pack, address):
    async with aiofiles.open(address) as file:
        pack.append(await file.read())

async def main():
    content = []
    await asyncio.gather(*(reader(content, f'./file{_+1}.txt') for _ in range(10)))

    return content

def core():
    content = []
    for number in range(10):
        with open(f'./file{number+1}.txt') as file:
            content.append(file.read())
    
    return content

if __name__ == '__main__':
    # Asynchronous
    s = time.perf_counter()
    content = asyncio.run(main())
    e = time.perf_counter()
    print(f'Take {e - s: .3f}')

    # Synchronous
    s = time.perf_counter()
    content = core()
    e = time.perf_counter()
    print(f'Take {e - s: .3f}')

得到了这个结果:

Asynchronous: Take 0.011
Synchronous: Take 0.001

为什么异步代码比同步代码耗时更长? 我哪里做错了


Tags: 代码importtxtasyncioasynctimemaindef
1条回答
网友
1楼 · 发布于 2024-06-02 05:20:13

我在aiofiles的GitHub上发布了一期#110,aiofiles的作者回答说:

You're not doing anything wrong. What aiofiles does is delegate the file reading operations to a thread pool. This approach is going to be slower than just reading the file directly. The benefit is that while the file is being read in a different thread, your application can do something else in the main thread.

A true, cross-platform way of reading files asynchronously is not available yet, I'm afraid :)

我希望它对任何有同样问题的人都有帮助

相关问题 更多 >