如何在外面阻止无限循环?

时间:2013-12-13 19:24:52

标签: python

考虑这种情况:我有类(第三方库),其方法使用无限循环:

class Worker(object):
    ...
    def transator(self):
       ...
       #if connected print data 
       while self.connected:
           ...  
           print data

if __name__ == "__main__":
    worker = Worker()
    worker.translator()

我在程序中使用此类,无法更改。 (我在github看了代码:))。 什么是手动停止此方法的最佳方法?我需要在此方法之外更改self.connected到False。我有个主意,但我认为这很复杂。

import time
from threading import Thread 

class Terminator(Worker):
     ... 
     def terminate(self):
         time.sleep(10)
         self.connected = False

if __name__ == "__main__":
    ter = Terminator()
    t   = Tread(target=ter.terminate)
    t.start()
    ter.translator() 

还有其他方法吗?

3 个答案:

答案 0 :(得分:2)

  

问:“如何在外面阻止无限循环”

     

答:阅读使用无限循环的方法/类的文档,看看是否有任何影响它运行的参数。

对于您的用例,我认为您应该能够将timeout参数传递给TwythonStreamer构造函数...

答案 1 :(得分:1)

除了mcgilson正确的答案,你可以添加一个属性描述符,如:

def toggle_connect(self, singleton=[True]):
    singleton[0] = not singleton[0]
    return singleton

and after:

worker=Worker()
Worker.connected = property(toggle_connect)

答案 2 :(得分:0)

您应该可以执行以下操作:

import time
from threading import Thread

if __name__ == "__main__":
    w = Worker()
    t = Thread(target=w.transator)
    t.start()
    time.sleep(10)
    w.connected = False
    t.join()