我已经完成了一个脚本来同时转换多个文件,但是代码不是将 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()
有人有想法吗?
您的代码每次都会覆盖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()
您可以使用星图轻松完成。(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/')