Как заполнить каждый член многопроцессорного пула уникальными данными - PullRequest
1 голос
/ 05 ноября 2019

Предположим, у меня есть массив объектов, которые я хочу распределить среди n рабочих процессов, чтобы выполнить работу по отображению. Каков наилучший способ сделать это? Прямо сейчас я заполняю очередь рабочими объектами, а затем заставляю каждый из рабочих процессов извлекать один из рабочих объектов из указанной очереди, однако я чувствую, что должен быть более краткий способ сделать это (возможно, найти способ передачиуникальные аргументы для каждого инициализатора). То, что я сейчас делаю, кажется достаточно распространенным, чтобы выполнить использование пула и его различных аргументов без сопровождающего кода или (как я считаю,) злоупотребления общей очередью.

EG

import multiprocessing as mp


objects = [ obj1, obj2, obj3 ]

object_pool = mp.Queue()
for o in objects: object_pool.put(o)

worker_object = None

def init():
    worker_object = Worker(object_pool.get())

def worker(thing):
    return worker_object.transform(thing)

pool = mp.Pool(len(objects), initializer=init)

pool.map(worker, [item 1, item 2,...])
...