[英]Python multiprocessing lock strange behavior
我注意到代碼中的行為無法解釋。 這是代碼:
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
orange
apple
melon
但是我得到了
melon
melon
melon
任何想法將不勝感激。
正如蒂姆·彼得斯(Tim Peters)所評論的那樣,問題不在於Lock
而並非deque
在各個進程之間共享,而是每個進程都有自己的副本。
multiprocessing
模塊提供了一些數據結構,這些數據結構將在進程之間共享,例如multiprocessing.Queue
。 改用它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.