队列或事件作为进程间的切换

Queue or event as a switch between processes

我有一个由 3 个进程组成的系统:一个主进程和 2 个子进程。

第一个子进程不断地检查一个条件,一旦这个条件被验证,第二个子进程就会发生一些事情。 这可能会发生多次。

所以我想知道...是否可以使用 mp.Event 作为触发器?我正在考虑...切换它,例如 True/False bool 变量,并在第二个过程中寻找它。 像这样:

主进程

import multiprocessing as mp
from multiprocessing import set_start_method, Queue, Event
from p01 import P01_Initializer
from p02 import P02_Initializer
import time
import sys

def main():
    set_start_method("spawn")
    sw_event = mp.Event()

    p01 = mp.Process(target=P01_Initializer, args=(sw_event, ))
    p01.daemon = True
    p01.start()
    p02 = mp.Process(target=P01_Initializer, args=(sw_event, ))
    p02.daemon = True
    p02.start()

    ## close everything after 15 seconds
    t_start = time.time()
    while True:
        if time.time() - t_start > 15:
            p01.terminate()
            p02.terminate()
            sys.exit(0)

if __name__ == "__main__":
    main()

第一个子进程

import time

def P01_Initializer(sw_event):
    process_01 = P01(sw_event)
    process_01.run()

class P01():
    def __init__(self, sw_event):
        self.sw_event = sw_event

    def run(self):
        while True:
            if condition:
                self.sw_event.set() ### switching it, like a bool variable

第二个子进程

import time

def P02_Initializer(sw_event):
    process_02 = P02(sw_event)
    process_02.run()

class P02():
    def __init__(self, sw_event):
        self.sw_event = sw_event

    def run(self):
        while True:
            if self.sw_event == False:
                do nothing
            else:
                self.sw_event.set() ### switch it back to False, waiting for next occurence
                do something

这样的事情可行吗,还是我应该只使用布尔变量并使用队列在进程之间传递它?

好的,基本上你可以 set/unset (?) 事件通过使用:

sw_event.set()
sw_event.clear()

完成后,您可以通过以下方式查看活动状态:

sw_event.is_set()