Итак, я пытаюсь написать многопроцессорный код, который, надеюсь, заполнит список, основанный на некоторых запущенных процессах. Но это совсем не изменяет список.
Теперь я знаю, что не могу получить доступ к одному и тому же элементу и увеличить его из нескольких потоков, потому что это приведет к условиям гонки. Но у меня есть код, который обращается к ОДНОМУ индексу из ОДНОГО и только одного процесса. Так, например, если у меня есть список из 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]