Próbuję użyć puli Worker w python za pomocą obiektów Process. Każdy pracownik (proces) wykonuje pewną inicjalizację (zajmuje nieprzydatny czas), przechodzi serię zadań (najlepiej używając map()
) i zwraca coś. Komunikacja nie jest konieczna. Nie mogę jednak wymyślić, jak używać funkcji map() do korzystania z funkcji mojego pracownika compute()
.Python Pool with worker Processes
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)
jest praca w kolejce na drogę zamiast, czy mogę użyć map()
?
Wszystkie obiekty procesu są stanowe. Możesz usunąć to słowo z tytułu. Również. "compute" to metoda pracownika. W przykładach jest to zwykle całkowicie niezależna funkcja. Dlaczego nie napisać funkcji obliczeniowej, aby po prostu włączyć zarówno inicjowanie, jak i przetwarzanie? –
Wystarczająco fair, dzięki. Inicjalizacja zajmuje dużo czasu, więc chcę to zrobić tylko raz na proces roboczy. – Felix
Należy podkreślić, że część pytania dotyczy "zaliczenia serii zadań". Ponieważ nie było to oczywiste. –