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()
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 ;-)
"Skoro ludzie wyewoluowali z małp to czemu małpy nadal istnieją?"
Python for Android vs. AppInventor - 2:0 ;-)
Maszyna stanów kontra labirynt ;-)
yyy... fork bomba w phytongu? Swoją drogą nie zastanowiło cię, dlaczego jedno ma w nazwie Thread a drugie Process skoro interfejs ten sam?
OdpowiedzUsuńWpaść wpadłem, ale skoro stwierdzenie na StackOverflow było w stylu "użyj multiprocessing, w miejsce threading, ma taki sam interfejs więc nie będzie to trudne" to założyłem, że po prostu mamy przykład Pythonowego nazewnictwa (coś jak z urllib i urllib2, albo tym jak rozbito urllib2 w Pythonie 3.0, czyli że nazywamy jak nam się podoba ;-)). No i stwierdziłem, że spróbuję zobaczyć czy to pomoże ;-)
Usuń