Пул python с рабочими процессами

Я пытаюсь использовать рабочий пул в python, используя объекты процесса. Каждый worker (Process) выполняет некоторую инициализацию (занимает нетривиальное количество времени), получает серию заданий (в идеале с использованием map () ) и что-то возвращает. Помимо этого, никакой связи не требуется. Однако я не могу понять, как использовать map (), чтобы использовать функцию моего рабочего compute () .

from multiprocessing import Pool, Process

class Worker(Process):
    def __init__(self):
        print 'Worker started'
        # do some initialization here
        super(Worker, self).__init__()

    def compute(self, data):
        print 'Computing things!'
        return data * data

if __name__ == '__main__':
    # This works fine
    worker = Worker()
    print worker.compute(3)

    # workers get initialized fine
    pool = Pool(processes = 4,
                initializer = Worker)
    data = range(10)
    # How to use my worker pool?
    result = pool.map(compute, data)

Можно ли вместо этого использовать очередь заданий, или я могу использовать ] map () ?

28
задан Felix 27 January 2012 в 20:13
поделиться