如何知道目标函数中多处理中的进程状态?

问题描述 投票:0回答:1

在多处理中,我如何知道当前进程和其他进程的状态(如运行、已终止)?

我的场景是 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 所以这个过程不会被终止(我知道这不是一个好方法)。所以在这里我想要停止条件,就像其他进程完成后杀死这个进程一样。

有人可以帮忙吗?

python-3.x multiprocessing
1个回答
0
投票

您可以利用共享内存资源,该资源可以被两个进程使用,并且可以作为退出其中一个进程的开关。

因此,在您的情况下,如果您希望

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

© www.soinside.com 2019 - 2024. All rights reserved.