К примеру, у меня есть словарь:
D = {'x': [1, 2, 3], 'y': [4, 5, 6], 'z': [7, 8, 9]}
и я хочу обработать его, используя несколько процессов. Для упрощения примера, пусть нужно просто умножить каждый элемент списков на 10 (хотя в реальности будет использоваться более сложная функция, для которой мультипроцессинг целесообразен). Набросок кода такой:
import multiprocessing
PROCESSES = 4
class Worker(multiprocessing.Process):
def __init__(self, work_queue):
super().__init__()
self.work_queue = work_queue
def run(self):
while True:
try:
key, index = self.work_queue.get()
self.process(key, index)
finally:
self.work_queue.task_done()
def process(self, key, index):
D[key][index] = D[key][index] * 10
# Здесь написана полная ерунда, но я просто хочу показать, что мне нужно получить
def main():
work_queue = multiprocessing.JoinableQueue()
for i in range(PROCESSES):
worker = Worker(work_queue)
worker.daemon = True
worker.start()
for key, value in D.items():
for i in range(len(value)):
work_queue.put((key, i))
work_queue.join()
main()
Проблема в том, что я не представляю, как можно передать очереди словарь со вложенными списками, так чтобы отдельные процессы могли сохранять результаты своих вычислений в этот словарь. Если использую Manager().dict(), то простые значения (строки, числа) сохраняются, а списки - нет.
Прошу помочь разобраться с этим вопросом.