6

私は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スクリプトを作成せずに)問題を解決する別の方法があると思いますね。

4

2 に答える 2

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 つのスレッドすべてがすべてのスレッドまで動作し続けることが保証されます。完了しました。

コンピューターのアーキテクチャによっては、同時に実行するプロセスが多すぎると、すべてのプロセスが遅くなる可能性があることに注意してください (まず、プロセッサのコア数と、同時に実行しているものによって異なります)。

于 2012-08-26T00:20:07.023 に答える
0

bashを実行する代わりに、Pythonプログラムに独立したプロセスを作成させることもできますが、それはそれほど違いはありません。あなたが不十分だと思うのはあなたの解決策について何ですか?

于 2012-08-26T00:08:05.387 に答える