środa, października 10, 2012

Python zabójca ;-) czyli krótka opowieść o tym jak multiprocess "zabił" komputer ;-)

Wierzenie Internetowi może boleć ;-)
Skarżyłem się na problemy z multiprocessing'iem w Pythonie. Już rozumiem dlaczego je miałem ;-)

Chyba na StackOverflow czy czymś podobnym przeczytałem poradę dla kogoś narzekającego na GILa, że niech użyje multiprocessing, bo ma to to taki sam interfejs jak threading i powinno działać.
Więc programik:

import threading

class MyThread(threading.Thread):
def run(self):
i = 0
while True:
i=i+1
print threading.current_thread(),i

for i in range(0,8):
p = MyThread()
p.start()

Zmieniłem w:

import multiprocessing

class MyThread(multiprocessing.Process):
def run(self):
i = 0
while True:
i=i+1
print multiprocessing.current_process(),i

for i in range(0,8):
p = MyThread()
p.start()

I to był mój błąd ;-)
Bo teraz program nie działa tak, że tworzy 8 wątków, które sobie robią co mają robić... o nie ;-)
Teraz program po uruchomieniu odpala jak rozumiem 8 swoich kopii, każda sobie chyba nadal wykonuje to z run, ale tu nie mam pewności ;-) każda z tych 8 kopii uruchamia kolejne 8 kopii, każda z tych kopii kopii (64 już) uruchamia kolejne 8 i tak dalej ;-)
Komputer przestał mi odpowiadać przy blisko 12 tysiącach procesów, które zużywały już ponad 16GB RAM ;-) zabicie tego potwora się nie powiodło ;-)


Podobne postybeta
Python i wiele rdzeni ;-)
Python z urllib = najlepszy menadżer pobierania ;-)
Python for Android vs. AppInventor - 2:0 ;-)
Maszyna stanów kontra labirynt ;-)
Przepływ sterowany danymi - A takie Java'owe coś ;-)