🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.python
3 messages
3 total messages Started by Gallus Anonimus Fri, 04 Dec 2009 09:45
Python 3.1 multiprocessing katastrofa :)
#27005
Author: Gallus Anonimus
Date: Fri, 04 Dec 2009 09:45
26 lines
1786 bytes
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?
Re: Python 3.1 multiprocessing katastrofa :)
#27006
Author: Łukasz Rekucki
Date: Fri, 04 Dec 2009 13:54
49 lines
3074 bytes
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.
Re: Python 3.1 multiprocessing katastrofa :)
#27007
Author: Gallus Anonimus
Date: Fri, 04 Dec 2009 15:03
23 lines
1730 bytes
On Fri, 4 Dec 2009 05:54:01 -0800 (PST), Łukasz Rekucki
<lrekucki@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ć...
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads