亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在原地停止長時間運行,而不讓它運行到最后

在原地停止長時間運行,而不讓它運行到最后

海綿寶寶撒 2022-12-06 15:06:26
所以我想弄清楚這個問題和所有其他問題之間的區別是什么:我想打破一個長時間的函數,它是這樣開始的:while running:    framerate += 1.0    if Counter > 0.0:但我不想只用running=False它來停止它,因為那樣已經觸發的最后一個 while 循環仍然會完成并運行到最后。我需要它來微調幀速率,因此循環必須在 while 循環中的位置停止并從頭開始重新啟動。而且由于 while 循環真的很長,我真的不想添加if running==False:       break到 while 循環中的每個表達式。有什么辦法可以在不添加數十個 break 表達式的情況下立即退出 while 循環嗎?
查看完整描述

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 標志。此外,循環中沒有中斷條件,并且循環中沒有信號或標志檢查。我相信這就是你想要的。


多處理與線程不同,我建議您研究差異以確保這適合您的情況和整體應用程序。


查看完整回答
反對 回復 2022-12-06
?
哈士奇WWW

TA貢獻1799條經驗 獲得超6個贊

如果您不想要太多代碼,可以去掉while running, 并使用while True, 而不是if running == False: break只使用break。(抱歉,如果這沒有幫助)



查看完整回答
反對 回復 2022-12-06
?
拉丁的傳說

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

但在所有情況下,您都無法繞過檢查每個重要位置的條件,然后執行中斷或停止或返回。

有時可行的方法是,如果您的循環很長,您可以重構代碼以減少執行檢查的位置。


查看完整回答
反對 回復 2022-12-06
?
神不在的星期二

TA貢獻1963條經驗 獲得超6個贊

也許你可以為此使用一個線程。啟動一個線程來做循環事情,并在時間到時停止。參考這篇文章https://www.geeksforgeeks.org/python-different-ways-to-kill-a-thread/


查看完整回答
反對 回復 2022-12-06
  • 4 回答
  • 0 關注
  • 130 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號