Python - 多处理和文本文件处理

Python - multiprocessing and text file processing

背景: 我有一个巨大的文件 .txt,我必须处理它。这是一个 data mining 项目。 所以我把它分成许多 .txt 个文件,每个 100MB 大小,将它们全部保存在同一个目录中,并设法 运行 这样:

from multiprocessing.dummy import Pool

for filename in os.listdir(pathToFile):
    if filename.endswith(".txt"):
       process(filename)
    else:
       continue

在进程中,我将文件解析为对象列表,然后应用另一个函数。这比按原样 运行 整个文件。但是对于足够大的文件,我将无法 运行 一次,我将不得不切片。所以我想要线程,因为我不必等待每个 process(filename) 完成。

如何申请?我检查过 this 但我不明白如何将它应用到我的代码中...

如有任何帮助,我们将不胜感激。 我查看了 here 以了解如何执行此操作。我尝试过的:

pool = Pool(6)
for x in range(6):
    futures.append(pool.apply_async(process, filename))

不幸的是我意识到它只会处理前 6 个文本文件,或者不会?我怎样才能让它发挥作用?一旦一个线程结束,分配给它另一个文件文本并开始 运行ning.

编辑:

for filename in os.listdir(pathToFile):
    if filename.endswith(".txt"):
       for x in range(6):
           pool.apply_async(process(filename))
    else:
       continue

首先,对于 CPU 密集型任务(处理文件是瓶颈)它不会帮助,在这种情况下你应该使用 "real" multiprocessing.

您描述的问题似乎更适合使用 Poolmap 函数之一:

from multiprocessing import Pool
files = [f for f in os.listdir(pathToFile) if f.endswith(".txt")]
pool = Pool(6)
results = pool.map(process, files)
pool.close()

这将使用 6 个工作进程来处理文件列表和 return 在处理完所有文件后 process() 函数的 return 值的列表。您当前的示例将提交 相同 文件 6 次。