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