Python 两个多处理机之间的实时通信
我有两个进程,我需要当一个进程发生了什么,另一个进程也会发生什么。 例如:Python 两个多处理机之间的实时通信,python,multiprocessing,Python,Multiprocessing,我有两个进程,我需要当一个进程发生了什么,另一个进程也会发生什么。 例如: 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():
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()
此代码显然不起作用,如何使其起作用?我不需要一个过程结束然后得到结果,我需要这个过程在那之后继续。。。有办法吗
谢谢大家! 您忘记在
start()
之后添加.join()
。
试试这个:
a.start()
b.start()
a.join()
b.join()
为了使
函数_2
等待直到函数_1
达到某个状态,而不是使用共享变量,您可以创建一个多处理.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()
谢谢:)我写队列。在函数_1中放入(“某物”),在函数_2中放入:虽然为True:如果不是队列。empty:打印(“执行某物”),但不幸的是,它不起作用:\n你知道为什么吗?你应该通过在函数名后添加括号来调用
empty
方法:queue.empty()
。请注意,在无限循环中不断检查队列是否为空,而循环将不必要地耗费大量CPU时间。如我的回答所示,你应该坚持使用queue.get()
。但我需要不断检查状态是否发生变化,当状态发生变化时,它会导致一些事情,queue.get()只检查一次……我明白了。如果您的状态可以前后翻转,您确实可以在循环中调用empty
方法,并使function\u 1
调用queue。一旦需要暂停function\u 2
时,获取。是的睡眠
肯定会解决CPU使用问题,只要几秒钟的延迟是可以接受的。