Python中的并行程序不产生任何输出

时间:2019-02-04 03:38:55

标签: python python-3.x python-2.7 multiprocessing python-multiprocessing

我有一个简单的任务。需要为大量文件运行特定功能。此任务可以很容易地并行化。

这是工作代码:

# filelist is the directory containing two file, a.txt and b.txt.
# a.txt is the first file, b.xt is the second file
# I pass a file that lits the names of the two files to the main program

from concurrent.futures import ProcessPoolExecutor, as_completed
from pathlib import Path
import sys

def translate(filename):
    print(filename)
    f = open(filename, "r")
    g = open(filename + ".x", , "w")
    for line in f:
        g.write(line)

def main(path_to_file_with_list):
    futures = []
    with ProcessPoolExecutor(max_workers=8) as executor:
        for filename in Path(path_to_file_with_list).open():
            executor.submit(translate, "filelist/" + filename)
        for future in as_completed(futures):
            future.result()

if __name__ == "__main__":
     main(sys.argv[1])

但是,不会创建任何新文件,即该文件夹不包含a.txt.x和b.txt.x文件。

上面的代码有什么问题,我该如何工作?

谢谢。

1 个答案:

答案 0 :(得分:1)

这应该使您走上正确的道路。如果它不起作用并且不是明显的错误,那么我怀疑您可能没有正确使用所有文件路径...我应该指出,减少线程开销比使用进程更能受益于线程写文件。文件I / O应该释放GIL,这样您就可以从加速中受益(如果一次复制多个行,则收益更大。)也就是说,如果您仅复制文件,则实际上应该只使用{{1 }}或shutil.copy

shutil.copy2