因此,我正在尝试编写多进程代码,希望能够根据正在运行的一些进程填充一个列表。但这根本不是在修改名单。你知道吗
现在我知道我不能访问同一个元素并从多个线程中递增它,因为这将导致竞争条件。但我拥有的代码只能从一个进程访问一个索引。例如,如果我有一个包含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-
将列表从list重命名为lis,因为list是python内置的
相关问题 更多 >
编程相关推荐