2011-09-19 9 views
0

この質問は、言語にとらわれない方法で答えられるかもしれませんが、私はpython(fyi)を使用しています。プログラム補完の漸近線を使用

最後の1分間に終了する必要がある無限ループを実行しています。<新しいオブジェクトが10個発見されました。

例:

 

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

EDIT:質問はこれです:あなたはポップ場合
if less than 10 newobjs have been discovered over the last minute

+0

質問は何ですか? –

+0

答えはありませんが、私の答えには2つのスレッドと1つのキューが含まれています。作業を行い、結果をキューに入れる1つのスレッド、結果が遅すぎる場合に最初のスレッドを実行して終了する別のスレッド。 –

答えて

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分未満の値であり、両端キューに9個以下のアイテムがある場合は、ループから脱落します。しかし、9つ以上の項目がある場合にそれを押し戻すことを忘れないでください。 1分以上経過したアイテムは破棄されます。

+0

1つのオブジェクトを作成するのに30分かかりますか?両端キューをチェックすることは、スレッディングなしではすばやく実行されません。 –

+0

真実ですが、それは文脈が与えられていない問題のドメイン問題です。私は 'dig_more_objects()'が非ブロックであると仮定しています。 –

0

multiton patternをタイマーで試して、そのようなクラスを設計できます。ここでの荒い刺しだアイデア