簡體   English   中英

Python多處理鎖定奇怪的行為

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM