這個問題在這里已經有了答案: 函式呼叫超時 21 個答案 15 小時前關閉。
我想呼叫一個函式并在一分鐘后停止運行,回傳一個值。我有一個看起來類似于的代碼:
def foo(txt):
best_value=-1
for word in txt:
if value(word)>best_value:
best_value=value(world)
return best_value
我想在一分鐘后停止運行并回傳 best_value。謝謝你的幫助。
uj5u.com熱心網友回復:
如果你想將時序代碼從業務邏輯中分離出來,并將開銷保持在最低限度,一個簡單的方法是在代碼中使用一個全域變數來告訴它何時停止運行:
time_out = False
def foo(txt):
best_value=-1
for word in txt:
if value(word)>best_value:
best_value=value(world)
if time_out:
break
return best_value
然后使用一個單獨的函式系結到使用Timer來停止它:
def send_stop():
global time_out
time_out = True
Timer(60.0, send_stop).start()
best_value = foo(corpus)
uj5u.com熱心網友回復:
一個相對愚蠢但可能令人滿意的解決方案是設定一個計時器并在每次回圈迭代時檢查它:
import time
def foo(txt):
best_value=-1
curr_time = time.time()
for word in txt:
if value(word)>best_value:
best_value=value(world)
if time.time() - curr_time > 60:
break
return best_value
這里最大的缺點是大量計算浪費在檢查上,我們必須進行系統呼叫來檢索時間。我們可以通過檢查每 1000 個單詞(例如)來緩解這種情況,如下所示:
import time
def foo(txt):
best_value=-1
curr_time = time.time()
for i, word in enumerate(txt):
if value(word)>best_value:
best_value=value(world)
if i % 1000 == 0 and time.time() - curr_time > 60:
break
return best_value
這只會進行更便宜的檢查,i % 1000并且會在計算之前短路time.time() - curr_time > 60。
這可能已經足夠好了,但如果你想要更多,這里有另一個可能的角度。
在兩個獨立的行程之間更新一些共享記憶體,其中一個行程進行計算并更新一些共享記憶體,另一個行程負責休眠 60 秒然后殺死另一個行程。
如果您選擇走那條路線,這可能非常有用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/475041.html
標籤:Python python-3.x 时间 返回值 休息
上一篇:如何洗掉字串中運算式和句點之間的空格?(Python3)
下一篇:使用Python對鍵和值進行分組
