【问题标题】:Way to use Multiple queue to communicate between two python scripts使用多队列在两个python脚本之间进行通信的方法
【发布时间】:2021-06-02 01:18:29
【问题描述】:

我有两个 python 脚本,即 script_1.py 和 script_2.py 这是我正在工作的项目的小型 sn-ps。 这就是我打算做的事情

  1. script_2 将首先启动,它将计算列表的长度并将此计数传递给 script_1
  2. 在 script_1 中,它得到这个计数 然后这将生成第二个列表,如果新计数大于接收计数,它将向 script_2 传递消息停止
  3. 最后,在 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')

请说出正确的方法或需要进行哪些更改。

【问题讨论】:

    标签: python-3.x multiprocessing queue


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2013-04-19
      • 2021-07-19
      • 1970-01-01
      • 2019-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多