猿问

Python 同时填充一个列表

因此,我正在尝试编写多进程代码,希望能够根据正在运行的某些进程填充列表。但它根本没有修改列表。


现在我知道我不能访问同一个元素并从多个线程增加它,因为它会导致竞争条件。但我所拥有的是从 ONE 和只有一个进程访问 ONE 索引的代码。例如,如果我有一个包含 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]


温温酱
浏览 188回答 1
1回答

精慕HU

那是因为全局变量不在进程之间共享。使用multiprocessing.Manager.list -from multiprocessing import Process, Managerdef incrAt(idx, lis):    lis[idx] += 1with Manager() as manager:    lis = manager.list([0, 0, 0, 0])    p0 =  Process(target = incrAt, args=(0,lis))将您的列表从 list 重命名为 lis 因为列表是 python 的内置
随时随地看视频慕课网APP

相关分类

Python
我要回答