如何编写脚本以有效地在多核机器中运行多进程

时间:2017-08-17 16:02:23

标签: python multithreading parallel-processing multiprocessing multicore

大家。我有一个文件Python(例如名为:run.py)。这个程序需要一些参数(python run.py param1 param2 ...),每个元组参数都是一个设置。现在,我必须同时运行许多设置才能尽快完成所有设置。我写了一个文件run.sh如下:

python run.py setting1 &
python run.py setting2 &
#more setting
...
wait

此文件将同时执行所有进程,对吧?我在机器64核心CPU上运行。我在这里有一些问题:

  1. 每个进程是否会在一个核心上运行?
  2. 如果没有,我该怎么做?
  3. 如果我可以为每个核心运行一个进程,那么当我运行一个单独的进程时,setting1的运行时间将等于运行的时间:python run.py setting1

1 个答案:

答案 0 :(得分:0)

您是否尝试使用multiprocessing模块?

假设你想要多次并行执行某个函数work(arg1, arg2),你最终会得到类似的东西

import multiprocessing
p = multiprocessing.Pool(multiprocessing.cpu_count()
results = p.starmap(work, [(arg11, arg12), (arg21, arg22)....]
# do something with the list of results

如果你的函数看起来彼此非常不同,那么你可以通过编写函数包装器来逃避:

def wrapper(dict_args, inner_function):
  return inner_function(dict_args)
# then launch the multiprocessing mapping

p.starmap(wrapper, [({'arg1': v1, 'arg2': v2}, job1), ({'foo': bar}, job2)..]