簡體   English   中英

如果花費很長時間,python超時功能

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM