在多处理中,我如何知道当前进程和其他进程的状态(如运行、已终止)?
我的场景是 2 个进程正在运行
process_run = multiprocessing.Process(target=run, name="run")
process_read = multiprocessing.Process(target=read_process, name="read_process")
process_run.start()
process_read.start()
processes = [process_run,process_read]
for p in processes:
p.join()
这里我想在 process_run 执行完成后杀死 process_read。
process_read 伪代码看起来像这样:
def read_process():
while True:
#read the data and print in the terminal
time.sleep(20)
这里我使用 while True 所以这个过程不会被终止(我知道这不是一个好方法)。所以在这里我想要停止条件,就像其他进程完成后杀死这个进程一样。
有人可以帮忙吗?
您可以利用共享内存资源,该资源可以被两个进程使用,并且可以作为退出其中一个进程的开关。
因此,在您的情况下,如果您希望
process_read
在 process_run
的信号上停止,您可以有一个共享开关,该开关将由 process_run
设置,并且对于每个 while 循环 process_read
将决定继续或不基于在此开关值上。
以下是示例实现:
# main program
shared_switch = multiprocessing.Value('b', 1) # b represents `int` for python and `signed char` in C Type.
process_run = multiprocessing.Process(target=run, name="run", args=(shared_switch,))
process_read = multiprocessing.Process(target=read_process, name="read_process", args=(shared_switch,))
process_run.start()
process_read.start()
processes = [process_run,process_read]
for p in processes:
p.join()
读取过程:
# read process
def read_process(shared_switch):
while shared_switch.value:
#read the data and print in the terminal
time.sleep(20)
运行过程:
# run process
def run(shared_switch):
# does some work here
shared_switch.value = 0
这里,共享交换机依赖于所有进程的共享内存空间,并且是线程安全的。 您可以在这里阅读更多相关信息:共享内存
要了解有关
b
对象中使用的 Value
的更多信息,请转到此处:ctypes