两个多进程之间的实时通信



我有两个处理,我需要当一个进程上发生了一些事情时,另一个进程也会发生其他事情。例如:

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()

您忘记在start()之后添加.join()。试试这个:

a.start()
b.start()
a.join()
b.join()

最新更新