Python 保持一个进程监听相互交流

Python 保持一个进程监听相互交流,python,multiprocessing,Python,Multiprocessing,我想同时启动两个进程。一个将立即开始处理,另一个将等待来自第一个进程的触发器(和参数),等待它开始处理 以下是我的代码:- Main.py packet_obj = packet(i,30,30,30,30,0) d = multiprocessing.Process(target = workers.send_trigger_to_controller, args = (packet_obj)) d.start() # another process should start listeni

我想同时启动两个进程。一个将立即开始处理,另一个将等待来自第一个进程的触发器(和参数),等待它开始处理

以下是我的代码:-

Main.py

packet_obj = packet(i,30,30,30,30,0)
d = multiprocessing.Process(target = workers.send_trigger_to_controller, args = (packet_obj))
d.start()

# another process should start listening. Something like whenever a trigger is send 
# from the first process, it should then start processing.
def send_trigger_to_controller(packet_obj):

    while condition:

        if condition:
            d = multiprocessing.Process(target = send_packet_to_controller, args = (sensor_id,high_low,trigger_type))
            d.start()

        elif condition:
            d = multiprocessing.Process(target = send_packet_to_controller, args = (sensor_id,high_low,trigger_type))
            d.start()

        elif condition:
            d = multiprocessing.Process(target = send_packet_to_controller, args = (sensor_id,high_low,trigger_type))
            d.start()
Workers.py

packet_obj = packet(i,30,30,30,30,0)
d = multiprocessing.Process(target = workers.send_trigger_to_controller, args = (packet_obj))
d.start()

# another process should start listening. Something like whenever a trigger is send 
# from the first process, it should then start processing.
def send_trigger_to_controller(packet_obj):

    while condition:

        if condition:
            d = multiprocessing.Process(target = send_packet_to_controller, args = (sensor_id,high_low,trigger_type))
            d.start()

        elif condition:
            d = multiprocessing.Process(target = send_packet_to_controller, args = (sensor_id,high_low,trigger_type))
            d.start()

        elif condition:
            d = multiprocessing.Process(target = send_packet_to_controller, args = (sensor_id,high_low,trigger_type))
            d.start()
从现在起,我将为满足的每个条件启动一个新流程。PS:所有这些条件都满足,但时间间隔不同,因此根据时间实例,传递不同的参数值

我想为所有这些创建一个单独的进程,它将监听所有这些。如果发送了任何触发器,则该进程应该先侦听然后处理,而不是创建一个完整的新进程


我该怎么做?

启动两个进程并使用队列()进行通信

使用multiprocessing.Process创建2个进程(一个生产者进程和一个消费者进程)。 生产者是立即开始处理的人,消费者是等待生产者进程准备就绪的人

生产者进程完成后将计算结果放入队列

消费者进程“侦听”队列,当有项目时,它开始处理

比如:

class ProducerProcess(Process):

    def __init__(self, q, **kwargs):
        Process.__init__(self,)
        self.q = q

    def run():
        res = do_stuff()
        q.put(res)

class ConsumerProcess(Process):

    def __init__(self, q, **kwargs):
        Process.__init__(self,)
        self.q = q

    def run():
        while True:
            args = q.get(block=True) # wait until there is an item in the queue
            do_stuff(*args) # do stuff here


q = Queue()
p1 = ProducerProcess(q, **your_args)
p2 =ConsumerProcess(q, **extra_args)
p2.start()
p1.start()
# join the processes p1.join() p2.join() or use JoinableQueue depending what you need

听起来您想要
队列的功能。有一些方法可以在进程之间放置/获取值(在本例中是各种参数)。启动将队列传递到的单个进程,当满足各种条件时,将参数放入队列,而不是启动另一个进程。