两台多处理之间的实时通信。

我有两个进程,我需要当一个进程发生了什么事情时,另一个进程也会发生一些事情,例如:我有两个进程。

import multiprocessing


def function_1(num):
    while True:
        status = False
        for i in range (num):
            if i == 100:
                status = True
            i +=1


def function_2():
    while True:
        if status == True:
            print("status changed")

if __name__ == '__main__':
    num = 101
    a = multiprocessing.Process(target=function_1,args=(num,))
    b = multiprocessing.Process(target=function_2)


    a.start()
    b.start()


    a.join()
    b.join()

这段代码显然是行不通的,我怎么才能让它行得通?我不需要一个进程结束然后得到结果,我需要进程在结束后继续……有什么方法可以做到这一点吗?

解决方案:

而不是使用一个共享变量,目的是为了使 function_2 等到 function_1 达到一定的状态,你可以创建一个 multiprocessing.Queue 实例传递给两个函数,并利用 Queue.get 块,直到队列收到要去阙的东西,并让 function_1 一旦达到所需的状态,就把东西放入队列中。

import multiprocessing

def function_1(queue, num):
    while True:
        for i in range(num):
            print(i)
            if i == 3:
                queue.put(None)

def function_2(queue):
    queue.get()
    print('do something')

if __name__ == '__main__':
    num = 5
    queue = multiprocessing.Queue()
    a = multiprocessing.Process(target=function_1, args=(queue, num))
    b = multiprocessing.Process(target=function_2, args=(queue,))
    a.start()
    b.start()

给TA打赏
共{{data.count}}人
人已打赏
未分类

检测 Azure 服务总线队列中相同的未处理消息

2022-9-8 9:54:17

未分类

滚动的进度条

2022-9-8 9:54:19

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索