[英]Python simultaneously filling up a list
因此,我嘗試編寫多進程代碼,希望這些代碼可以根據正在運行的某些進程來填充列表。 但這根本沒有修改列表。
現在我知道我無法訪問同一元素並無法從多個線程對其進行遞增,因為這將導致爭用條件。 但是我所擁有的是從一個而且只有一個進程訪問一個索引的代碼。 這樣,例如,如果我有一個包含4個元素的列表,則我將運行4個進程,每個元素一個進程。 但是,這不起作用。 即使我讀過該列表,據說也是線程安全的。
我寫了一個小程序演示我的問題:
from multiprocessing import Process
list = [0,0,0,0]
def incrAt(idx):
list[idx] += 1
p0 = Process(target = incrAt, args=(0,))
p1 = Process(target = incrAt, args=(1,))
p2 = Process(target = incrAt, args=(2,))
p3 = Process(target = incrAt, args=(3,))
p0.start()
p1.start()
p2.start()
p3.start()
# Do stuff while we wait...
p0.join()
p1.join()
p2.join()
p3.join()
print(list) # should print [1,1,1,1] but prints [0,0,0,0]
這是因為全局變量不在進程之間共享。
使用multiprocessing.Manager.list-
from multiprocessing import Process, Manager
def incrAt(idx, lis):
lis[idx] += 1
with Manager() as manager:
lis = manager.list([0, 0, 0, 0])
p0 = Process(target = incrAt, args=(0,lis))
將列表從列表重命名為lis,因為列表是python內置的
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.