【问题标题】:How to run python script for multiple input on multiple cores at the same time?如何同时在多个核心上运行多个输入的python脚本?
【发布时间】:2023-03-28 10:12:01
【问题描述】:

我有 28 个输入文件和 28 个可用 CPU。我编写了一个 python 脚本,它使用 subprocess 来解析带有 QualityAnalysisMain_v2.py 的输入文件。现在它在一个 CPU 上运行良好。我想做的是在一个 CPU 上并行运行每个输入文件 - 28 个同时运行。

我已经尝试过这里的方法:python spreading subprocess.call on multiple CPU cores

尤其是这段代码:

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

这里:

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

但它最终解析了第一个输入 28 次...

这是我的代码 - 脚本正在为输入目录中的每个文件运行,但在一个 CPU 上:

for pliki in os.listdir(input_data):
    nazwa = pliki.split(".")[0]
    print("python QualityAnalysisMain_v2.py " + input_data + pliki)
    subprocess.call("mkdir " + output_data + nazwa, shell = True)
    subprocess.call("python QualityAnalysisMain_v2.py " + input_data + pliki, shell = True)

非常感谢您的任何建议。

最好, 阿加塔

【问题讨论】:

  • 如果您不显示如何将文件传递给工作人员进行处理,我们无法猜测出什么问题......
  • 请参阅更新后的帖子。最好的!

标签: python multithreading multiprocessing


【解决方案1】:

您将相同的列表传递给所有线程,因此所有线程都从列表的开头开始。您应该改为将单个文件名传递给它们:

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

【讨论】:

  • @Agata:请不要忘记接受答案,以向未来的读者表明您不再需要此问题的帮助。
猜你喜欢
  • 2021-02-02
  • 2020-02-19
  • 2021-06-06
  • 1970-01-01
  • 1970-01-01
  • 2013-03-05
相关资源
最近更新 更多