Python Language
マルチプロセッシング
サーチ…
2つのシンプルなプロセスの実行
複数のプロセスを使用する簡単な例は、別々に実行される2つのプロセス(ワーカー)です。次の例では、2つのプロセスが開始されます。
-
countUp()
は、毎秒1をカウントします。 -
countDown()
はcountDown()
1をカウントダウンします。
import multiprocessing
import time
from random import randint
def countUp():
i = 0
while i <= 3:
print('Up:\t{}'.format(i))
time.sleep(randint(1, 3)) # sleep 1, 2 or 3 seconds
i += 1
def countDown():
i = 3
while i >= 0:
print('Down:\t{}'.format(i))
time.sleep(randint(1, 3)) # sleep 1, 2 or 3 seconds
i -= 1
if __name__ == '__main__':
# Initiate the workers.
workerUp = multiprocessing.Process(target=countUp)
workerDown = multiprocessing.Process(target=countDown)
# Start the workers.
workerUp.start()
workerDown.start()
# Join the workers. This will block in the main (parent) process
# until the workers are complete.
workerUp.join()
workerDown.join()
出力は次のとおりです。
Up: 0
Down: 3
Up: 1
Up: 2
Down: 2
Up: 3
Down: 1
Down: 0
プールとマップの使用
from multiprocessing import Pool
def cube(x):
return x ** 3
if __name__ == "__main__":
pool = Pool(5)
result = pool.map(cube, [0, 1, 2, 3])
Pool
は、シーンの背後にある複数のWorkers
(プロセス)を管理するクラスであり、プログラマーに使用させることができます。
Pool(5)
は5つのプロセスで新しいプールを作成し、 pool.map
マップと同じように動作しますが、複数のプロセス(プールの作成時に定義された量)を使用します。
map_async
、 apply
、およびapply_async
を使用しても同様の結果が得られます 。
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow