Czytałem o Pythonie multiprocessing module. Nadal nie sądzę, abym miał bardzo dobre zrozumienie tego, co potrafi.Python: przetwarzanie wielordzeniowe?
Załóżmy, że mam procesor czterordzeniowy i mam listę zawierającą 1 000 000 liczb całkowitych i chcę sumę wszystkich liczb całkowitych. Mogę po prostu:
list_sum = sum(my_list)
Ale to tylko przesyła je do jednego rdzenia.
Czy jest możliwe, aby za pomocą modułu wieloprocesowego podzielić macierz i otrzymać każdy rdzeń, otrzymując sumę jego części i zwrócić wartość, aby można było obliczyć całkowitą sumę?
Coś jak:
core1_sum = sum(my_list[0:500000]) #goes to core 1
core2_sum = sum(my_list[500001:1000000]) #goes to core 2
all_core_sum = core1_sum + core2_sum #core 3 does final computation
Każda pomoc będzie mile widziane.
@Martin, Wierzę, że te zakleszczenia, za http://docs.python.org/library/multiprocessing.html#multiprocessing-programming: "proces, który umieścił przedmioty w kolejka będzie czekała przed zakończeniem, dopóki wszystkie buforowane elementy nie zostaną dostarczone przez wątek "podajnika" do podstawowej pętli "- przykład impasu, który daje docs jest bardzo podobny do twojego kodu (jest to pojedynczy podproces na początku, dołącz, pobierz sekwencja) i dwa podprocesy zamiast jednego nie pomagają. Zamień wiązania i uzyskaj lub po prostu usuń połączenia. –
"Udało się to dla mnie", prawdopodobnie dlatego, że dane po prostu pasują do rury. W każdym razie usunąłem łączenia. –
Czy używasz tego w systemie Linux? – Nope