如何进行进程间通信?

2024-06-16 14:21:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我们正在树莓Pi3上用Python3进行多处理。我们在过程中进行面罩检测、人员计数和咳嗽检测。目前我们有3个流程。所有这些都被描述为函数。(def mask (),…def cough ()等)它们都同时工作,这里没有问题。问题是,作为第四个进程,我们希望根据这三个进程的信息编写一个报警函数

我们的目标是,如果在这3次检测中出现不必要的情况(例如错误使用遮罩、人数过多),则在屏幕上打印错误。4.作为一个过程,我们不能将其他函数返回的值与alarm ()函数下的if-else命令一起使用。我写了下面代码的总结。我们如何在过程中使用数据?现在,alarm()不能正常工作

def mask():
      while True:
         if problem:
            return True

def cough():
      while True:
         if problem:           
            return True
def alarm():
      while True:
        if mask():
           print("Eror1")
        elif cough():
           print("Error2")

if __name__ == "__main__":
    p1 = multiprocessing.Process(target=cough,)
    p2 = multiprocessing.Process(target=mask,)
    p3 = multiprocessing.Process(target=alarm,)

    p1.start()
    p2.start()
    p3.start()
    

Tags: 函数truetargetif进程过程def错误
1条回答
网友
1楼 · 发布于 2024-06-16 14:21:53

看看Python docs on multiprocessing,特别是关于exchanging objects between processessharing state between processes的部分

如果您只想在出现某些情况时向主进程发送信号,那么^{}对象可能就足够了。如果您想在进程之间交换更复杂的数据,那么^{}更适合

对于Event对象,您的代码大致如下所示:

import multiprocessing
from random import random
import time


def mask(event):
    while True:
        if random() < 0.1:
            event.set()
        time.sleep(1)


def cough(event):
    while True:
        if random() < 0.2:
            event.set()
        time.sleep(1)


def alarm(events):
    while True:
        for i, event in enumerate(events, start=1):
            # wait for up to a second for the event to be set by the other process
            # and then wait for the next event
            if event.wait(1):
                print('Error ' + str(i))
                event.clear()


def main():
    e1 = multiprocessing.Event()
    p1 = multiprocessing.Process(target=mask, args=(e1,))
    p1.start()

    e2 = multiprocessing.Event()
    p2 = multiprocessing.Process(target=cough, args=(e2,))
    p2.start()

    alarm([e1, e2])


if __name__ == '__main__':
    main()

相关问题 更多 >