您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Python,并行处理大型文本文件

Python,并行处理大型文本文件

最简单的方法可能是使用现有代码一次处理所有30个文件-仍然需要花费一整天的时间,但您需要一次处理所有文件。(即,“ 9个月内有9个婴儿”很容易,“ 1个月内有1个婴儿”很难)

如果您确实想更快地完成单个文件,则取决于计数器实际更新的方式。如果几乎所有工作都只是在分析价值,则可以使用多处理模块来减轻负担:

import time
import multiprocessing

def slowfunc(value):
    time.sleep(0.01)
    return value**2 + 0.3*value + 1

counter_a = counter_b = counter_c = 0
def add_to_counter(res):
    global counter_a, counter_b, counter_c
    counter_a += res
    counter_b -= (res - 10)**2
    counter_c += (int(res) % 2)

pool = multiprocessing.Pool(50)
results = []

for value in range(100000):
    r = pool.apply_async(slowfunc, [value])
    results.append(r)

    # don't let the queue grow too long
    if len(results) == 1000:
        results[0].wait()

    while results and results[0].ready():
        r = results.pop(0)
        add_to_counter(r.get())

for r in results:
    r.wait()
    add_to_counter(r.get())

print counter_a, counter_b, counter_c

这将允许50个slowfuncs并行运行,因此无需花费1000s(= 100k * 0.01s),而是需要20s(100k / 50)* 0.01s才能完成。如果您可以像上面那样将函数重组为“ slowfunc”和“ add_to_counter”,则应该可以使速度提高24倍。

python 2022/1/1 18:39:41 有259人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶