python中的多处理,使用多个文件

时间:2017-03-28 13:51:19

标签: python multiprocessing

我已经完成了一个同时转换多个文件的脚本,但代码不是将4个文件与多个进程一起转换,而是使用多个进程逐个转换文件,这是我的代码:

def convert (directoryName):
  for path, dirs, files in os.walk(directoryName):
    for f in files:
      if f.endswith(".txt")
        f1=f
        path1=path         
        p=mp.Process(target=convert1, args=(path1,f1,))
  p.start()

有没有人有想法?

2 个答案:

答案 0 :(得分:1)

您的代码每次都会覆盖p,因此您只需在循环结束后启动1个进程。

相反,在创建流程时调用p.start并存储它,以便最后可以在所有流程上调用join

def convert (directoryName):
  process_list = []
  for path, dirs, files in os.walk(directoryName):
    for f in files:
      if f.endswith(".txt")
        f1=f
        path1=path         
        p=mp.Process(target=convert_stdf_hdf5, args=(path1,f1,))
        p.start()
        process_list.append(p)
  # wait for processes to finish
  for p in process_list:
     p.join()

答案 1 :(得分:0)

您可以使用starmap轻松完成。 (Python3.3或更高版本。)

import os
from multiprocessing import Pool

def convert(directoryName):
    p = Pool()
    args = []
    for path, dirs, files in os.walk(directoryName):
        args.extend([[path, f] for f in files if f.endswith('.txt')])
    p.starmap(convert_stdf_hdf5, args)

if __name__ == '__main__':
    convert('path/to/target/')