2011-09-19 35 views
0

這個問題可以用與語言無關的方式回答,但我使用python(fyi)。使用漸近線編程完成

我運行一個無限循環,其需要在最後一分鐘時< 10個新對象被發現終止。

如:

 

while True: 
    newobjs = dig_more_objects(obj) 
    if less than 10 newobjs have been discovered over the last minute 
     break 
 

編輯:問題是:如何實現這一行:
if less than 10 newobjs have been discovered over the last minute

+0

有什麼問題嗎? –

+0

沒有時間回答,但我的答案將包括兩個線程和一個隊列。一個線程來完成工作並將結果放在隊列中,另一個線程監視並殺死第一個線程,如果結果太慢,就不會執行。 –

回答

1

這裏有它粗糙刺見this - 取決於dig_more_objects性質,你可能需要調整的條件:

import time 
results = [] 
while True: 
    mark = time.time() 
    newobjs = dig_more_objects(obj) 
    elapsed = time.time() - mark 
    results.append((newobjs, elapsed)) 
    count = 0 
    threshhold = 0 
    for objs, elapsed in results[::-1]: 
     count += len(objs) # or +1 of dig_more_objects only returns one at a time 
     threshhold += elapsed 
     if threshhold > 60.0 and count < 10: 
      break 
+0

乾淨的解決方案!謝謝 –

0

使用collections.deque持有發現的對象的時候,如果你彈出一個小於1分鐘的值,並且有7個或更少的項目出現在循環中。如果有超過9種物品,請不要忘記將其推回。超過一分鐘的物品被丟棄。

+0

如果產生一個物體需要三十分鐘會怎樣?如果沒有線程,檢查deque將不會很快發生。 –

+0

的確如此,但這是一個問題領域問題,沒有給出任何上下文。我假設'dig_more_objects()'是非阻塞的。 –