Obserwowałem to zachowanie podczas próby utworzenia zagnieżdżonych procesów potomnych w języku Python. Oto program rodzic parent_process.py
:Tworzenie procesów potomnych w procesie potomnym z niepoprawnym przetwarzaniem w języku Python
import multiprocessing
import child_process
pool = multiprocessing.Pool(processes=4)
for i in range(4):
pool.apply_async(child_process.run,())
pool.close()
pool.join()
Program nadrzędny wywołuje funkcję "run" w następującym programie dziecko child_process.py:
import multiprocessing
def run():
pool = multiprocessing.Pool(processes=4)
print 'TEST!'
pool.close()
pool.join()
Kiedy uruchamiam program nadrzędny, nic nie zostało wydrukowane a program szybko się zakończył. Jeśli jednak przeniesiony zostanie print 'TEST!'
, jeden wiersz powyżej (zanim zagnieżdżone procesy podrzędne zostaną utworzone), 'TEST!'
są drukowane 4 razy.
Ponieważ błędy w procesie potomnym nie będą drukowane na ekranie, wydaje się, że program ulega awarii, gdy proces potomny tworzy własne zagnieżdżone procesy potomne.
Czy ktoś może wyjaśnić, co dzieje się za sceną? Dzięki!
Wiem, że istnieje limit w zagnieżdżaniu, który podnosi wyjątek jon, ale daleko ci do tego w tym przypadku. Myślę, że problem jest gdzieś indziej, być może w mechanizmie "pool" ... – CoMartel
Co próbujesz poprawić tym? Nie będziesz szybszy, uruchamiając pule 'Pool' niż uruchamiając większy' Pool' – CoMartel
@HarryPotfleur Intencją było, aby każdy proces potomny zarządzał własnym zbiorem procesów, aby program wyglądał czysto logicznie. Powiedzmy, że mam 16 rdzeni, wtedy procesy zagnieżdżone 4x4 mogą działać jednocześnie. Dostarczam obejście poniżej. –