我已经完成了一个同时转换多个文件的脚本,但代码不是将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()
有没有人有想法?
答案 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/')