Я должен совместно использовать огромный словарь (приблизительно 1 ГБ в размере) между несколькими обрабатывают, однако так как все процессы будут всегда читать из него. Мне не нужна блокировка.
Там какой-либо путь состоит в том, чтобы совместно использовать словарь без блокировки?
Многопроцессорный модуль в Python обеспечивает класс Массива, который позволяет совместно использовать, не блокируя путем установки
lock=false
однако нет такой опции для Словаря, предоставленного менеджером в многопроцессорном модуле.
Ну, на самом деле dict на Manager вообще не имеет блокировок! Думаю, это справедливо и для других общих объектов, которые вы можете создать через менеджер. Как я это понял? Я попробовал:
from multiprocessing import Process, Manager
def f(d):
for i in range(10000):
d['blah'] += 1
if __name__ == '__main__':
manager = Manager()
d = manager.dict()
d['blah'] = 0
procs = [ Process(target=f, args=(d,)) for _ in range(10) ]
for p in procs:
p.start()
for p in procs:
p.join()
print d
Если бы на d
были блокировки, результат был бы 100000
. Но вместо этого результат получился довольно случайным, и это просто хорошая иллюстрация того, почему блокировки нужны, когда вы изменяете материал ;-)
Так что просто идите вперед и используйте manager.dict()
.