使用多队列在两个 python 脚本之间进行通信的方法
Way to use Multiple queue to communicate between two python scripts
我有两个 python 脚本,即 script_1.py 和 script_2.py
这是我正在工作的一个项目的小片段。
这就是我打算做的
- script_2 将首先开始,它将计算列表的长度并将此计数传递给 script_1
- 在script_1中,它得到这个计数
然后这将生成第二个列表,如果新计数大于接收计数,它将向 script_2
传递一个消息停止
- 最后,在script_2中有一个无限循环的数据函数。在该循环下它将收到此消息,如果消息停止,它将打破循环并重新开始。
我已经使用多处理的队列方法来实现这个。
以下是我的代码,
当我 运行 他们时,我没有得到任何结果。
script_2.py
from multiprocessing import Process,Queue,Pipe
from script_1 import scan_fn
def data_fn(q2):
msg = q2.get()
print(msg)
if(msg == 'stop'): #this will be inside an infinite loop
print('msg received, end the loop')
if __name__ == 'main':
q1 = Queue()
q2 = Queue()
initial_list = [1,2,3,4,5,6,7,8]
initalnumber = len(initial_list)
q1.put(initalnumber)
iscanprocess = Process(target=scan_fn,args=(q1,q2))
rdataprocess = Process(target=data_fn,args=q2)
iscanprocess.start()
rdataprocess.start()
script_1.py
import multiprocessing
from multiprocessing import Pipe,Process,Queue
def scan_fn(q1,q2):
ninitialdevice = q1.get()
while True:
new_list = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
newdevices = len(new_list)
if (newdevices > ninitialdevice):
q2.put('stop')
请告诉我什么是正确的方法或需要进行哪些更改。
将script_2.py
更改为以下代码:
from multiprocessing import Process,Queue,Pipe
from script_1 import scan_fn
def data_fn(q2):
msg = q2.get()
print(msg)
if(msg == 'stop'): #this will be inside an infinite loop
print('msg received, end the loop')
if __name__ == '__main__':
q1 = Queue()
q2 = Queue()
initial_list = [1,2,3,4,5,6,7,8]
initalnumber = len(initial_list)
q1.put(initalnumber)
iscanprocess = Process(target=scan_fn,args=(q1,q2))
rdataprocess = Process(target=data_fn,args=(q2,))
iscanprocess.start()
rdataprocess.start()
我有两个 python 脚本,即 script_1.py 和 script_2.py 这是我正在工作的一个项目的小片段。 这就是我打算做的
- script_2 将首先开始,它将计算列表的长度并将此计数传递给 script_1
- 在script_1中,它得到这个计数 然后这将生成第二个列表,如果新计数大于接收计数,它将向 script_2 传递一个消息停止
- 最后,在script_2中有一个无限循环的数据函数。在该循环下它将收到此消息,如果消息停止,它将打破循环并重新开始。
我已经使用多处理的队列方法来实现这个。 以下是我的代码, 当我 运行 他们时,我没有得到任何结果。
script_2.py
from multiprocessing import Process,Queue,Pipe
from script_1 import scan_fn
def data_fn(q2):
msg = q2.get()
print(msg)
if(msg == 'stop'): #this will be inside an infinite loop
print('msg received, end the loop')
if __name__ == 'main':
q1 = Queue()
q2 = Queue()
initial_list = [1,2,3,4,5,6,7,8]
initalnumber = len(initial_list)
q1.put(initalnumber)
iscanprocess = Process(target=scan_fn,args=(q1,q2))
rdataprocess = Process(target=data_fn,args=q2)
iscanprocess.start()
rdataprocess.start()
script_1.py
import multiprocessing
from multiprocessing import Pipe,Process,Queue
def scan_fn(q1,q2):
ninitialdevice = q1.get()
while True:
new_list = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
newdevices = len(new_list)
if (newdevices > ninitialdevice):
q2.put('stop')
请告诉我什么是正确的方法或需要进行哪些更改。
将script_2.py
更改为以下代码:
from multiprocessing import Process,Queue,Pipe
from script_1 import scan_fn
def data_fn(q2):
msg = q2.get()
print(msg)
if(msg == 'stop'): #this will be inside an infinite loop
print('msg received, end the loop')
if __name__ == '__main__':
q1 = Queue()
q2 = Queue()
initial_list = [1,2,3,4,5,6,7,8]
initalnumber = len(initial_list)
q1.put(initalnumber)
iscanprocess = Process(target=scan_fn,args=(q1,q2))
rdataprocess = Process(target=data_fn,args=(q2,))
iscanprocess.start()
rdataprocess.start()