[英]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.