繁体   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