Używam przetwarzania wieloprocesowego w moim projekcie. Mam funkcję pracownika, która umieszcza w kolejce wyniki. Wszystko dziala. Ale ponieważ rozmiar x rośnie (w moim przypadku x to tablica) coś poszło nie tak. Tutaj jest uproszczoną wersją mojego kodu:Wielokrotne przetwarzanie w python zablokowany
def do_work(queue, x):
result = heavy_computation_function(x)
queue.put(result) # PROBLEM HERE
def parallel_something():
queue = Queue()
procs = [Process(target=do_work, args=i) for i in xrange(20)]
for p in procs: p.start()
for p in procs: p.join()
results = []
while not queue.empty():
results.append(queue.get)
return results
widzę w systemie monitorowania procesów python działa, ale potem coś się stało i wszystkie procesy są uruchomione, ale nic nie robi. To właśnie dostaję podczas wpisywania ctrl-D.
pid, sts = os.waitpid(self.pid, flag)
KeyboardInterrupt
Wykonuję niektóre testy. Problem polega na tym, że umieszczanie wyników w kolejce jest faktem, jeśli nie umieszczę wyników, wszystko działa, ale wtedy nie byłoby żadnego celu.
Wydaje się, że nigdy nie przekazujesz obiektu kolejki do nowego procesu. Również 'args' z' Process' powinno być 'krotką'. Spróbuj zmienić go na 'args = (queue, i)'. Twój 'queue.get' również wymaga pewnych nawiasów, aby stał się' queue.get() '. – Wessie