编辑:我解决了!不要像我一样犯同样的错误
替换此行:
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")
答案 0 :(得分:1)
join()函数使每个循环在下一个循环开始之前终止。来自标准库文档:
"加入([超时]) 如果可选参数timeout为None(缺省值),则该方法将阻塞,直到调用其join()方法的进程终止。如果timeout是一个正数,它最多会阻塞超时秒。
一个过程可以连接多次。
进程无法加入自身,因为这会导致死锁。尝试在进程启动之前加入进程是错误的。"
解决方案:删除join()行。