我有28个输入文件和28个可用的CPU。我编写了一个python脚本,该脚本使用子流程通过QualityAnalysisMain_v2.py解析输入文件。现在,它可以在一个CPU上正常工作。我想做的是在一个CPU上并行运行每个输入文件-同时运行28个。
我在这里尝试过方法:python spreading subprocess.call on multiple CPU cores
尤其是此代码:
var sql = "your insert statement; your select statement";
此处:
import threading
import subprocess
def worker():
"""thread worker function"""
print 'Worker'
subprocess.call(mycode.py, shell=inshell)
return
threads = []
for i in range(5):
t = threading.Thread(target=worker)
threads.append(t)
t.start()
但是最终它解析了28次第一次输入...
这是我的代码-脚本正在为输入目录中的每个文件运行,但在一个CPU上运行:
for pliki in os.listdir(input_data):
nazwa = pliki.split(".")[0]
subprocess.call("mkdir " + output_data + nazwa, shell=True)
def SubprocessFiles():
for pliki in os.listdir(input_data):
print("python QualityAnalysisMain_v2.py " + input_data + pliki)
subprocess.call("python QualityAnalysisMain_v2.py " + input_data + pliki, shell = True)
return
threads = []
for i in range(28):
t = threading.Thread(target=SubprocessFiles)
threads.append(t)
t.start()
非常感谢您的任何建议。
最好, Agata
答案 0 :(得分:0)
您将相同的列表传递给所有线程,因此所有线程都从列表的开头开始。您应该为每个文件传递一个文件名:
def SubprocessFiles(pliki):
print("python QualityAnalysisMain_v2.py " + input_data + pliki)
subprocess.call("python QualityAnalysisMain_v2.py " + input_data + pliki, shell = True)
return
threads = []
for i, pliki in enumerate(os.listdir(input_data)):
t = threading.Thread(target=SubprocessFiles, args=[pliki])
threads.append(t)
t.start()