簡體   English   中英

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和一些微動開關制作一個機器人,並且我想檢查微動開關是否被觸發,所以我使用的是多處理模塊,該過程類具有幾個無限的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM