[英]python timing out of a function if takes a long time
假設我有一個功能
def may_take_a_long_time():
while 1:
# do something
if met_condition():
break
timeout_dur = 600
may_take_a_long_time()
do_something_else()
我該怎么辦,如果may_take_a_long_time()
比timeout_dur
花費更長的時間,則中止其所做的一切,並繼續執行do / do_something_else()
也許在調用may_take_a_long_time()
之前設置SIGALARM
? 我怎么做? 或在異步發生的線程中運行may_take_a_long_time()
,以便我可以在調用者的線程中使用may_take_a_long_time()
time.sleep(timeout_dur)
?
python中的線程有一個怪癖,如果您想要一個特定的答案,我建議您編輯問題並將其放在前面。
對於簡單的單線程,您可以按照其他用戶的建議使用現有的超時裝飾器,也可以使用自己的超時裝飾器,也可以執行類似的操作(但是,如果希望may_take_a_long_time()返回某些內容,則必須對代碼進行定制。 :
import time
def may_take_a_long_time(tout):
timeout = time.time() + tout
passed = False
while not passed:
passed = met_condition()
if time.time() > timeout:
break
def met_condition():
if some_condition:
return True
else:
return False
def do_something_else():
# TODO your code here
if '__name__' == '__main__':
may_take_a_long_time(30)
do_something_else()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.