如果流程函数(例如submit_process)有一个循环,可以在其中测试条件,则可以使用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()
收益率
^{pr2}$
在这里,过程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