私のコードで説明できない動作があります。私は出力がPythonマルチプロセッシングのロックの異常な動作
melon
orange
apple
melon
であろうと期待し
import multiprocessing
from collections import deque
LOCK = multiprocessing.Lock()
data = deque(['apple', 'orange', 'melon'])
def f(*args):
with LOCK:
data.rotate()
print data[0]
pool = multiprocessing.Pool()
pool.map(f, range(4))
ではなく、私は
melon
melon
melon
を取得する任意のアイデアをいただければ幸いです。これは、コードです。
「ロック」とは関係ありません。 Linux-yシステム上の各ワーカープロセスは、 'Pool'が作成されるときに、メインプロセスのアドレス空間(' fork() 'で読み込まれる)の_copy_を継承します。彼らはそれぞれ独自の 'data'のコピーを手に入れ、そのコピーに対するプロセスは他のプロセスのコピーに何の影響も与えません。 –
私は見る...ありがとう! – giorgosp