Python 如何在多处理程序中退出整个应用程序
下面是示例代码,正如所描述的代码一样,我想在一次运行过程中退出整个应用程序。但当我调用exit0函数时,其他一些处理仍在运行。那么,如何同时杀死所有正在运行的进程呢?感谢您的帮助Python 如何在多处理程序中退出整个应用程序,python,multiprocessing,exit,Python,Multiprocessing,Exit,下面是示例代码,正如所描述的代码一样,我想在一次运行过程中退出整个应用程序。但当我调用exit0函数时,其他一些处理仍在运行。那么,如何同时杀死所有正在运行的进程呢?感谢您的帮助 from multiprocessing import Process def submit_process(): sig = False #Here is some codes trying to change the value of the variable sig print "su
from multiprocessing import Process
def submit_process():
sig = False
#Here is some codes trying to change the value of the variable sig
print "submit_process"
if(sig == True):
#Here i want to exit the entire program instead of the single thread only.
#exit(0)
pass
process_list = []
print "OK"
for i in range(10):
process = Process(target = submit_process)
process.start()
process_list.append(process)
for i in range( len(process_list) ):
process_list[i].join()
您可以调用。终止进程列表中的所有内容。这通常是一个坏主意,因为您的流程的子流程将成为孤立的
从
终止进程。在Unix上,这是使用
SIGTERM信号;在Windows上使用TerminateProcess。注意,退出
不会执行处理程序和finally子句等
请注意,进程的子进程将不会终止——
他们将成为孤儿
在您的情况下,它看起来像:
from multiprocessing import Process
def submit_process():
sig = False
#Here is some codes trying to change the value of the variable sig
print "submit_process"
if(sig == True):
# Terminate all spawned processes
for process in process_list:
process.terminate()
exit(0)
process_list = []
print "OK"
for i in range(10):
process = Process(target = submit_process)
process.start()
process_list.append(process)
for i in range( len(process_list) ):
process_list[i].join()
如果您的流程功能(例如submit_流程)有一个循环,您可以在该循环中测试条件,则可以使用mp.事件:
import multiprocessing as mp
import time
import logging
logger = mp.log_to_stderr(logging.DEBUG)
logger.setLevel(logging.INFO)
def submit_process(i, sig):
logger.info("submit_process")
while True:
#Here is some codes trying to change the value of the variable sig
if i == 0:
time.sleep(2)
sig.set()
logger.info('SETTING sig')
time.sleep(1)
if sig.is_set():
#Here i want to exit the entire program instead of the single thread only.
#exit(0)
logger.info('sig is set!')
break
else:
logger.info('sig is NOT set!')
process_list = []
logger.info("OK")
sig = mp.Event()
for i in range(3):
process = mp.Process(target = submit_process, args = (i, sig, ))
process.start()
process_list.append(process)
for i in range( len(process_list) ):
process_list[i].join()
屈服
[INFO/MainProcess] OK
[INFO/Process-2] child process calling self.run()
[INFO/Process-2] submit_process
[INFO/Process-3] child process calling self.run()
[INFO/Process-1] child process calling self.run()
[INFO/Process-3] submit_process
[INFO/Process-1] submit_process
[INFO/Process-2] sig is NOT set!
[INFO/Process-3] sig is NOT set!
[INFO/Process-2] sig is NOT set!
此处process-1设置mp.事件:
[INFO/Process-1] SETTING sig
在这里,过程识别到sig已设置并中断while循环:
[INFO/Process-3] sig is set!
[INFO/Process-3] process shutting down
[INFO/Process-3] process exiting with exitcode 0
[INFO/Process-2] sig is set!
[INFO/Process-2] process shutting down
[INFO/Process-2] process exiting with exitcode 0
[INFO/Process-1] sig is set!
[INFO/Process-1] process shutting down
[INFO/Process-1] process exiting with exitcode 0
[INFO/MainProcess] process shutting down