2011-09-19 36 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()'是非阻塞的。 –