Python 同时处理多个无限循环

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 和一些微动开关的机器人,我想检查微动开关是否被触发,所以我正在使用多处理模块,过程 class 与一些无限的 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() 函数使每个循环在下一个循环开始之前终止。来自标准库文档:

”加入([超时]) 如果可选参数 timeout 是 None(默认值),则该方法会阻塞,直到调用其 join() 方法的进程终止。如果超时为正数,则最多阻塞超时秒数。

一个进程可以加入多次。

进程无法加入自身,因为这会导致死锁。在进程启动之前尝试加入进程是错误的。"

解决方案:删除 join() 行。