同时运行几个python程序

时间:2012-08-26 00:04:44

标签: python bash

我有python脚本 run.py

def do(i):
    # doing something with i, that takes time

start_i = sys.argv[1]
end_i = sys.argv[2]
for i in range(start_i, end_i):
    do(i)

然后我运行这个脚本:

python run.py 0 1000000

30分钟后脚本完成。 但是,这对我来说太长了。

所以,我创建了bash脚本 run.sh

python run.py 0 200000 &
python run.py 200000 400000 &
python run.py 400000 600000 &
python run.py 600000 800000 &
python run.py 800000 1000000

然后我运行这个脚本:

bash run.sh

6分钟后脚本完成。 相当不错。我很高兴。

但我想,还有另一种解决问题的方法(不创建bash脚本),不存在吗?

2 个答案:

答案 0 :(得分:10)

您正在寻找multiprocessing包,尤其是Pool类:

from multiprocessing import Pool
p = Pool(5)  # like in your example, running five separate processes
p.map(do, range(start_i, end_i))

除了将其整合到一个命令中之外,这还有其他优势,比调用python run.py 0 200000 &等方法更好。如果某些进程比其他进程花费的时间更长(因此,python run.py 0 200000可能先完成其他进程),这将确保所有5个线程继续工作,直到所有线程完成。

请注意,根据您计算机的体系结构,同时运行太多进程可能会降低所有进程的速度(对于初学者来说,这取决于您的处理器有多少核心,以及您同时运行的其他内容) )。

答案 1 :(得分:0)

你可以让你的python程序创建独立的进程,而不是bash做它,但这并没有太大的不同。您发现缺陷的解决方案是什么?