我的主函数运行一个无限的while循环,该循环通过为对象分配一个数字来标识对象。这个循环不应被阻塞。根据此数字的值,一个单独的进程应在 while 循环中轮询该变量,该循环仅在变量的某个值上退出。
我尝试为该轮询任务使用多处理。但是启动时的新进程显然会停止主循环,以便对象的编号不会更改。 为了避免变量范围出现问题,当检测到某个对象时,我在主循环中将 GPIO 引脚设置为 0 或 1。GPIO 引脚在启动进程内的 while 循环中读取,但在对象更改时保持不变。
如何在进程运行时保持主 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))
您应该使用队列将变量传输到子流程。并在此过程中使用"停止"值作为哨兵。
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))