[英]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.