2017-06-05 31 views
0

我有一個運行迭代深化搜索,想的一定時間過去之後,從最深的搜索返回值的函數。代碼框架看起來像如何運行一段時間後返回的搜索?

import time 

answers = [] 
START = time.clock() 
current_depth = 1 

while time.clock() - START < DESIRED_RUN_TIME: 
    answers.append(IDS(depth=current_depth)) 
    current_depth += 1 

return answers[-1] 

的問題與此代碼是它不會返回,直到時限過後。解決這個問題的最好方法是什麼?如果我只需在IDS函數中添加時間檢查,我如何確保返回找到的最後一個值?任何幫助將不勝感激。

+0

對於搜索問題,我保留了一個全球「最好」的答案,搜索分支更新了它,因爲他們找到了更好的答案。如果你有一個線程進行搜索,你不會遇到線程安全問題,否則你需要鎖定/關鍵部分/任何更新最好。 –

回答

0

您的代碼應該工作,除非IDS阻止,並採取了很長的時間。然後你必須等到IDS完成,時間限制可能不會那麼精確。

我不知道你所說的

的意思到底是什麼想的一定時間過去之後,從最深的搜索返回的值。

這段代碼的問題是,它不會返回,直到時限過後。

如果您有時間限制並且有更新時間,那麼您可以將此代碼用作生成器。

import time 

answers = [] 
START = time.clock() 
current_depth = 1 

def get_ids(update_time, limit_time): 
    last_update = time.clock() 
    while time.clock() - START < DESIRED_RUN_TIME: 
     answers.append(IDS(depth=current_depth)) 
     current_depth += 1 
     if time.clock() - last_update < update_time: 
      last_update = time.clock() 
      yield answers[-1] 

    yield answers[-1] 

for i in get_ids(1, 10): # get an ids every second and stop after 10 seconds 
    print(i) 
相關問題