我的主函数运行一个无限的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))
答案 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))