5

Szukałem sposobu na rozpoczęcie i zakończenie długotrwałych "zadań wsadowych" w pythonie. Obecnie używam "os.system()", aby uruchomić długo działające zadanie wsadowe wewnątrz każdego procesu potomnego. Jak mogłeś się domyślić, "os.system()" spawns nowy proces w tym procesie potomnym (proces wnuka?), Więc nie mogę zabić zadania wsadowego z procesu grand-parent. Aby zapewnić pewną wizualizację tego, co właśnie opisałem:Programowe wykonywanie i przerywanie długotrwałego procesu wsadowego w pythonie

Main (grandparent) process, with PID = AAAA 
      | 
      |------> child process with PID = BBBB 
         | 
         |------> os.system("some long-running batch file) 
            [grandchild process, with PID = CCCC] 

Tak, mój problem jest nie mogę zabić proces wnuka z dziadkiem ...

Moje pytanie brzmi, czy istnieje sposób, aby rozpocząć długotrwałe zadanie wsadowe w procesie potomnym i możliwość zabicia tego zadania wsadowego przez zakończenie procesu potomnego? Jakie są alternatywy dla os.system(), których mogę użyć, aby zabić zadanie wsadowe z głównego procesu?

Dzięki!

Odpowiedz

2

Jeśli korzystasz z systemu zgodnego z Posix (np. Linux lub OS X) i żaden kod Pythona nie musi być uruchamiany po procesie potomnym, użyj os.execv. Ogólnie należy unikać os.system i zamiast tego należy użyć modułu subprocess.

-1

Jeśli chcesz kontrolować uruchamianie i zatrzymywanie procesów potomnych, musisz użyć wątków. W takim przypadku nie szukaj dalej niż moduł Pythona threading. Moduł

3

subprocess to właściwy sposób na odradzanie i kontrolowanie procesów w Pythonie.

od docs:

Moduł podproces pozwala odradzania nowych procesów, podłączyć do swoich rur wejścia/wyjścia/błąd i uzyskać swoje kody powrotne. Ten moduł zamierza zastąpić kilka innych, starszych modułów i funkcji, takich jak:

os.system
os.spawn
os.popen
popen2
poleceń

tak .. Jeśli używasz Pythona w wersji 2.4 lub nowszej, subprocess jest zamiennikiem dla os.system

dla zatrzymania procesów, sprawdzenia poza obiektami terminate() i communicate().

Powiązane problemy