Używam modułu przetwarzania wieloprocesowego do przetwarzania równoległego. Bellow code snippet wyszukuje nazwę pliku w lokalizacji X i zwraca nazwę pliku, w którym znaleziono ciąg znaków. Ale w niektórych przypadkach proces wyszukiwania trwa długo, więc próbowałem zabić proces wyszukiwania z ponad 300 sekundami. Dla tego, że wykorzystałem timeout == 300 jako podane poniżej, to zabija proces wyszukiwania, ale to go zabija proces potomny odradza się za pomocą kodu mieszkowego.Proces automatycznego zabijania i proces potomny wieloprocesorowego puli
Próbowałem znaleźć wiele sposób, ale bez powodzenia:/
Jak mogę zabić proces macierzysty from pool wraz z jego procesem potomnym?
import os
from multiprocessing import Pool
def runCmd(cmd):
lresult = os.popen(cmd).read()
return lresult
main():
p = Pool(4)
data_paths = [list of paths of store data]
search_cmds = [ "SearchText.exe %s < %s"%(data_path, filename) for data_path in data_paths ]
results = [p.apply_async(runCmd, (cmd,), callback = log_result) for cmd in search_cmds]
try:
for result in results:
root.append(result.get(timeout=300))
#rool holds the result of search process
except TimeoutError:
for c in multiprocessing.active_children():
print '----->',c.pid
os.kill(c.pid, signal.SIGTERM)
p.close()
p.join()
if __name__ == '__main__':
main()
Process Tree in Process Explorer:
cmd.exe
------python.exe
----------------python.exe
--------------------------cmd.exe
---------------------------------SearchText.exe
----------------python.exe
--------------------------cmd.exe
---------------------------------SearchText.exe
----------------python.exe
--------------------------cmd.exe
---------------------------------SearchText.exe
----------------python.exe
--------------------------cmd.exe
---------------------------------SearchText.exe
powyżej fragmencie kodu dosnt zabić procesu potomnego
--------------------------cmd.exe
---------------------------------SearchText.exe
--------------------------cmd.exe
---------------------------------SearchText.exe
--------------------------cmd.exe
---------------------------------SearchText.exe
--------------------------cmd.exe
---------------------------------SearchText.exe
Tezy dziecko proces wyszukiwania zachować, to proces potomny również zginąć.
Proszę gildii.
Dzięki
get_children już nie istnieje metoda nazywa się [dzieci] (http://pythonhosted.org/psutil/#psu til.Process.children) – user37203
Użyłem daemonize, więc to podejście było dokładnie tym, czego szukałem. – crsuarezf