Python同时进行多处理更多的无限循环



编辑:我解决了!不要犯和我一样的错误

替换此行:

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() 行。

相关内容

  • 没有找到相关文章

最新更新