4 回答

TA貢獻1828條經驗 獲得超3個贊
從我們在評論中的討論來看,我相信您想從基于循環外的獨立計時器的循環中跳出。
此外,您不想確定循環內的中斷/返回條件(在循環代碼中的幾個位置)并立即中斷/返回,或者通過設置一個被檢查為循環條件的標志。
用戶當心:終止進程或線程需要仔細檢查留下的任何殘?。ù蜷_的連接、占用的資源、阻塞/鎖定等...)。在這種情況下,我不知道有什么,所以 - 至少對于初學者來說 - 應該這樣做:
import multiprocessing as m
import time
def looper():
i = 0
while True:
print "a) i="+str(i)
time.sleep(4)
print "b) i="+str(i)
time.sleep(4)
i += 1
p = m.Process(target=looper)
p.daemon = True
print "starting"
p.start()
time.sleep(9)
p.terminate()
print "done"
輸出:
starting
a) i=0
b) i=0
a) i=1
done
如果運行它,請注意需要 9 秒才能獲得此輸出。
除了計時器,您還可以使用不同的外部條件來終止。
請注意循環是如何在循環代碼中(在步驟 a 和 b 之間)中斷的,而不是在循環代碼的末尾或開始處中斷,通常情況下有 repeat 或 while 標志。此外,循環中沒有中斷條件,并且循環中沒有信號或標志檢查。我相信這就是你想要的。
多處理與線程不同,我建議您研究差異以確保這適合您的情況和整體應用程序。

TA貢獻1799條經驗 獲得超6個贊
如果您不想要太多代碼,可以去掉while running
, 并使用while True
, 而不是if running == False: break
只使用break
。(抱歉,如果這沒有幫助)

TA貢獻1789條經驗 獲得超8個贊
我認為你無法繞過 a) 確定中斷條件 b) 如果滿足則中斷
您的方法是通過設置標志然后在循環的 while(或重復)結束時檢查標志來中斷。
我沒有看到在您提供的循環片段中設置了“運行”標志,因此很難為您的案例提供特定于代碼的示例,但也許這樣做:
您可以在不設置中斷標志的情況下從循環中中斷:如果滿足條件,只需聲明“中斷”:
https://docs.python.org/2.0/ref/break.html
您還可以將循環放在一個函數中,并在檢測到中斷條件時盡早“返回”。這通過刪除所有臨時變量很好地清理了您的范圍。
您可以將循環放在迭代器中并引發 StopIteration 異常以指示迭代結束
https://docs.python.org/3.9/library/exceptions.html
但在所有情況下,您都無法繞過檢查每個重要位置的條件,然后執行中斷或停止或返回。
有時可行的方法是,如果您的循環很長,您可以重構代碼以減少執行檢查的位置。

TA貢獻1963條經驗 獲得超6個贊
也許你可以為此使用一個線程。啟動一個線程來做循環事情,并在時間到時停止。參考這篇文章https://www.geeksforgeeks.org/python-different-ways-to-kill-a-thread/
添加回答
舉報