队列或事件作为进程间的切换
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()
我有一个由 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()