[英]Python multiprocessing more infinite loops at the same time
编辑:我解决了! 不要像我一样犯同样的错误
替换此行:
p = multiprocessing.Process(target=check(mval,mname))
有:
p = multiprocessing.Process(target=check, args=(mval,mname))
-------------------------------------------------- -------------------------------------
。
。
。
我正在用Raspberry Pi和一些微动开关制作一个机器人,并且我想检查微动开关是否被触发,所以我使用的是多处理模块,该过程类具有几个无限的while循环,而问题是启动一个并等到它被触发并结束并开始下一个操作,而不是所有其他操作都独立开始和运行。 到目前为止,这是我的代码。
import multiprocessing
import time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setwarnings(False)
GPIO.setup(32, GPIO.IN, pull_up_down = GPIO.PUD_UP)
GPIO.setup(7, GPIO.IN, pull_up_down = GPIO.PUD_UP)
GPIO.setup(12, GPIO.IN, pull_up_down = GPIO.PUD_UP)
GPIO.setup(36, GPIO.IN, pull_up_down = GPIO.PUD_UP)
def check(mval, mname):
while True:
time.sleep(0.01)
check = GPIO.input(mval)
if check == False:
print("triggered " + mname)
with open("tmp.txt", "w"):
pass
f = open("tmp.txt", "w")
f.write(mname)
f.close()
break
def startcheck(mval, mname):
p = multiprocessing.Process(target=check(mval,mname))
p.start()
p.join()
startcheck(32, "m1")
startcheck(7, "m2")
startcheck(12, "m3")
startcheck(36, "m4")
join()函数使每个循环在下一个循环开始之前终止。 从标准库文档中:
“ join([timeout])如果可选参数timeout为None(默认值),则该方法将阻塞直到调用join()方法的进程终止。如果timeout为正数,则最多阻塞超时秒数。
一个过程可以多次加入。
进程无法加入自身,因为这将导致死锁。 在启动进程之前尝试加入该进程是错误的。”
解决方案:删除join()行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.