繁体   English   中英

同时运行几个python程序

[英]Run several python programs at the same time

我有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脚本),不存在吗?

您正在寻找多处理包,尤其是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个线程继续工作,直到所有线程完成。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM