通过多处理运行进程后如何保持主循环运行

时间:2019-10-21 18:37:15

标签: python multiprocessing

我的主函数运行一个无限的while循环,该循环通过将数字赋予对象来标识对象。该循环不应被阻塞。根据该数字的值,一个单独的过程将在while循环中轮询该变量,而while循环仅在该变量的某个值上退出。

我已尝试将多重处理用于该轮询任务。但是,新进程启动时显然会停止主循环,从而不会更改对象的编号。 为了避免变量范围出现问题,当检测到某个对象时,我在主循环中将GPIO引脚设置为0或1。在启动过程的while循环中读取GPIO引脚,但是当对象更改时,它保持不变。

在进程运行时如何保持主while循环运行?

def input_polling():
    print(rpigpio.input(Pi_kasse)," ..................")
    condition=True
    while condition:
        print(RPi.GPIO(12))
def main(args):
....
    inThread=multiprocessing.Process(target=input_polling,args=[])
....
    while True:
        print("311")
        inThread=multiprocessing.Process(target=input_polling,args=[])
        inThread.start()  
....
    If object==3
        Rpi.GPIO.output(Object,Low)
    else
        Rpi.GPIO.output(Object,HIGH)
    inThread.terminate()
    inThread.join()

if __name__ == '__main__':
    sys.exit(main(sys.argv))

1 个答案:

答案 0 :(得分:0)

您应该使用队列将变量传输到子流程。在此过程中,请使用“停止”值作为前哨。

import multiprocessing as mp

def input_polling(in_queue):
    print(rpigpio.input(Pi_kasse)," ..................")
    # polls the input queue and stops when "STOP" is send
    # will block until element becomes available
    for a in iter(in_queue.get, 'STOP'): 
        print("Doing stuff")

def main(args):
....
    in_queue = mp.Queue()
    inThread=multiprocessing.Process(target=input_polling,args=[in_queue])
    inThread.start()  
    while True:
        print("311")

....
        If object==3
            in_queue.put(your_number)

    # when done put 'STOP' into queue and wait for process to terminate
    in_queue.put('STOP')
    inThread.terminate()
    inThread.join()

if __name__ == '__main__':
    sys.exit(main(sys.argv))