Python 3.x 使用多队列在两个python脚本之间通信的方法

Python 3.x 使用多队列在两个python脚本之间通信的方法,python-3.x,multiprocessing,queue,Python 3.x,Multiprocessing,Queue,我有两个python脚本,即script_1.py和script_2.py 这是我正在工作的一个项目的小片段。 这就是我打算做的 脚本_2将首先启动,它将计算列表的长度,并将此计数传递给脚本_1 在script_1中,它得到这个计数 这将生成第二个列表,如果newcount大于received count,它将向脚本_2传递消息stop 最后,在脚本2中有一个具有无限循环的数据函数。在该循环下,它将接收该消息,如果消息为stop,它将中断该循环并重新开始增益 我使用了多处理的队列方法来实现这一点

我有两个python脚本,即script_1.py和script_2.py 这是我正在工作的一个项目的小片段。 这就是我打算做的

  • 脚本_2将首先启动,它将计算列表的长度,并将此计数传递给脚本_1
  • 在script_1中,它得到这个计数 这将生成第二个列表,如果newcount大于received count,它将向脚本_2传递消息stop
  • 最后,在脚本2中有一个具有无限循环的数据函数。在该循环下,它将接收该消息,如果消息为stop,它将中断该循环并重新开始增益
  • 我使用了多处理的队列方法来实现这一点。 下面是我的代码, 当我运行它们时,我没有得到任何结果

    脚本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()
    
    脚本_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()
    

    是的,我认为这些代码工作正常。