簡體   English   中英

Python同時填寫列表

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

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