Я хочу распараллелить обработку словаря, используя библиотеку многопроцессорности.Словарь многопроцессорности
Моей проблема может быть сведен к этому коду:
from multiprocessing import Manager,Pool
def modify_dictionary(dictionary):
if((3,3) not in dictionary):
dictionary[(3,3)]=0.
for i in range(100):
dictionary[(3,3)] = dictionary[(3,3)]+1
return 0
if __name__ == "__main__":
manager = Manager()
dictionary = manager.dict(lock=True)
jobargs = [(dictionary) for i in range(5)]
p = Pool(5)
t = p.map(modify_dictionary,jobargs)
p.close()
p.join()
print dictionary[(3,3)]
создать пул 5 рабочих, и каждый работник должен увеличивать словарь [(3,3)] 100 раз. Итак, если процесс блокировки работает правильно, я ожидаю, что словарь [(3,3)] будет равен 500 в конце скрипта.
Однако; что-то в моем коде должно быть неправильным, потому что это не то, что я получаю: процесс блокировки не кажется «активированным», а словарь [(3,3)] всегда имеет оценщик < 500 в конце скрипта.
Не могли бы вы мне помочь?
modify_array - отличное имя. Для чего используется метод? – MKesper
Спасибо за замечание, я просто забыл переименовать функцию. Я разрабатываю алгоритм, в котором я добавляю вероятности к некоторым элементам 2D-массива, но из-за небольшого числа элементов я полагал, что использование словаря было более умным. – pete
'manager.dict (lock = True)' не выделяет никакой блокировки, он создает управляемый эквивалент dict '{' lock ': True} ' – mata