Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Python 3.1 multiprocessing katastrofa :)

47 views
Skip to first unread message

Gallus Anonimus

unread,
Dec 4, 2009, 4:45:38 AM12/4/09
to
Witam.
Takie mam pytanko, czy kto� pr�bowa� uruchomi� poni�czy przyk�ad z
helpa do pythona 3.1? Modu� Multiprocessing ma zast�pi� threading
poprzez odpalenie kilku python�w i r�wnoleg�e uruchamianie zada�.
Brzmi fajnie, postanowi�em sprawdzi� i taki oto skrypcik znaleziony
w pomocy do��czonej to pythona 3.1 odpali�em:

from multiprocessing import Pool
p = Pool(5)
def f(x):
return x*x

p.map(f, [1,2,3])


Efekt skryptu jest taki, �e komputer mi umar� ;-)

Na pocz�tku nie wiedzia�em co si� sta�o, po prostu zatka�o sprz�ta,
ale po drugiej pr�bie ju� wiedzia�em - skrypt wpada w jak�� szalon�
p�tl� uruchamiania kolejnych python�w i kiedy ju� mam ich
uruchomionych ponad 750, w�wczas m�j windows nie jest
w stanie nawet wy�wietli� listy proces�w. Przy oko�o 1000 python�w
uruchomionych r�wnolegle pomaga wy��cznie sprz�towy reset.

Czy wy te� tak macie? To chyba nie jest zamierzony spos�b
dzia�ania tego przyk�adu?

Łukasz Rekucki

unread,
Dec 4, 2009, 8:54:01 AM12/4/09
to
On Dec 4, 10:45 am, Gallus Anonimus <gallusnnms@na_gmailu.com> wrote:
> Witam.
> Takie mam pytanko, czy ktoś próbował uruchomić poniżczy przykład z
> helpa do pythona 3.1? Moduł Multiprocessing ma zastąpić threading
> poprzez odpalenie kilku pythonów i równoległe uruchamianie zadań.
> Brzmi fajnie, postanowiłem sprawdzić i taki oto skrypcik znaleziony
> w pomocy dołączonej to pythona 3.1 odpaliłem:

>
> from multiprocessing import Pool
> p = Pool(5)
> def f(x):
>     return x*x
>
> p.map(f, [1,2,3])
>
> Efekt skryptu jest taki, że komputer mi umarł ;-)
>
> Na początku nie wiedziałem co się stało, po prostu zatkało sprzęta,
> ale po drugiej próbie już wiedziałem - skrypt wpada w jakąś szaloną
> pętlę uruchamiania kolejnych pythonów i kiedy już mam ich
> uruchomionych ponad 750, wówczas mój windows nie jest
> w stanie nawet wyświetlić listy procesów. Przy około 1000 pythonów
> uruchomionych równolegle pomaga wyłącznie sprzętowy reset.
>
> Czy wy też tak macie? To chyba nie jest zamierzony sposób
> działania tego przykładu?

Ten przykład jest podany jako do wpisania w trybie interaktywnym. W
innym przypadku, to schemat wygląda tak, że każde z tych 5-ciu nowych
interpreterów importuję plik z tym kodem, co oczywiście tworzy w
każdym z nich kolejne 5, itd. Zostało to opisane w dokumentacji i
rozwiązaniem jest umieszczenie kodu, który mógłby uruchamiać nowe
procesy po "if __name__ == '__main__'" (co ogółem jest dobrą
praktyką):

http://docs.python.org/3.1/library/multiprocessing.html#windows

Słowem:

from multiprocessing import Pool

def f(x):
return x*x

if __name__ == '__main__':
p = Pool(5)
print(p.map(f, [1,2,3]))

Działa bez zarzutu.

Gallus Anonimus

unread,
Dec 4, 2009, 10:03:54 AM12/4/09
to
On Fri, 4 Dec 2009 05:54:01 -0800 (PST), �ukasz Rekucki
<lrek...@gmail.com> wrote:


>Ten przyk�ad jest podany jako do wpisania w trybie interaktywnym. W
>innym przypadku, to schemat wygl�da tak, �e ka�de z tych 5-ciu nowych
>interpreter�w importuj� plik z tym kodem, co oczywi�cie tworzy w
>ka�dym z nich kolejne 5, itd. Zosta�o to opisane w dokumentacji i
>rozwi�zaniem jest umieszczenie kodu, kt�ry m�g�by uruchamia� nowe
>procesy po "if __name__ == '__main__'" (co og�em jest dobr�
>praktykďż˝):
>
>http://docs.python.org/3.1/library/multiprocessing.html#windows
>
>S�owem:
>>
>Dzia�a bez zarzutu.


Aaa to dzi�kuj� za info, tak my�la�em �e b��d mam w rozumowaniu,
bo nie wierzy�em �e wypuszczono by takiego buraka w kodzie :)

Musz� dok�adniej czyta�...


0 new messages