6

Pythonスクリプトで複数のPythonコマンドを並行して実行するにはどうすればよいですか? 簡単な例として、いくつかのスリープ コマンドがあります。

time.sleep(4)
time.sleep(6)
time.sleep(8)

上記のすべてを並行して実行したい。8 秒が経過すると、コントロールが元に戻ることを期待しています (これは、上記のすべてのスリープの最大値です)。実際のコマンドは異なりますが、上記でアイデアを得たいと考えています。

bash では、簡単に実行できます。

sleep 4 &
pid1=$!
sleep 6 &
pid2=$!
sleep 8 &
pid3=$!
wait $pid1 $pid2 $pid3

ありがとう。

4

3 に答える 3

10

マルチプロセッシングを使用した簡単な例:

import multiprocessing as mp
import time

pool = mp.Pool(3)
results = pool.map(time.sleep, [4, 6, 8] )

これにより、Steven Rumbalski の回答で示されているように、同じプロセスで個別のスレッドを作成する代わりに、個別のプロセスが生成されます。multiprocessing は GIL を (cpython で) 回避します。つまり、python コードを同時に実行できます (cpython ではスレッド化できません)。ただし、他のプロセスに送信する情報はピクル可能である必要があり、プロセス間で状態を共有することも少し複雑であるという欠点があります (最後の点については間違っている可能性がありますが、実際には使用したことがありませんthreading) 。 .

注意: 対話型インタプリタでこれを試さないでください

于 2012-08-23T18:02:35.180 に答える
7

threadingモジュールを見てください。次のようなものがあります。

import time,threading

def mySleep( sec ):
    time.sleep( sec )
t1 = threading.Thread( target=mySleep, args=(4,) )
t2 = threading.Thread( target=mySleep, args=(6,) )
t3 = threading.Thread( target=mySleep, args=(8,) )
t1.start()
t2.start()
t3.start()

# All threads running in parallel, now we wait
t1.join()
t2.join()
t3.join()
于 2012-08-23T17:54:20.607 に答える
5
from threading import Thread

threads = [Thread(target=time.sleep, args=(secs,)) for secs in (4,6,8)]
for t in threads: t.start()
for t in threads: t.join()
print 'all threads done!'
于 2012-08-23T18:03:26.563 に答える