gpt4 book ai didi

python - 如何使用 asyncio 进行基本文件 IO

转载 作者:太空宇宙 更新时间:2023-11-03 14:52:13 25 4
gpt4 key购买 nike

基本上我目前正在执行以下操作:

for bigLogFile in bigLogFileFolder:
with open(bigLogFile) as bigLog:
processBigLogfile(bigLog)

由于我从网络驱动器加载此日志文件,因此执行时间的最大部分是等待文件加载。然而,processBigLogFile 的执行时间也并非微不足道。

所以我的基本想法是使进程异步,允许程序在处理当前日志的同时加载下一个日志文件。看起来很简单,但我对异步编程没有任何经验,并且 asyncio 似乎提供了很多不同的方法来实现我想做的事情(使用 Task 或 Future 似乎是可能的候选者)。

有人可以告诉我实现这一目标的最简单方法吗? Asyncio 并不是绝对必要的,但我强烈建议使用内置库

需要注意的是,日志文件必须按顺序处理,所以我不能简单地并行加载和处理文件

最佳答案

当使用简单的 ThreadPoolExecutor 即可实现相同的功能时,无需复杂的异步编码:

from concurrent.futures import ThreadPoolExecutor

with ThreadPoolExecutor(max_workers=1) as tp:
for bigLogFile in bigLogFileFolder:
with open(bigLogFile) as bigLog:
data = bigLog.read()
tp.submit(process_data, data)

由于 ThreadPoolExecutor 在后台使用队列,因此只要 max_workers=1,处理顺序就会被保留。

此外,如果您有足够的内存来容纳所有/大多数文件,它也会正常工作。如果您受内存限制,那么您必须等待 ThreadPoolExecutor 完成一些任务。

关于python - 如何使用 asyncio 进行基本文件 IO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45819055/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com