如何在多个内核上同时运行多个输入的python脚本?

时间:2019-06-05 09:32:41

标签: python multithreading multiprocessing multiple-files

我有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

1 个答案:

答案 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()