考虑这种情况:我有类(第三方库),其方法使用无限循环:
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()
还有其他方法吗?
答案 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()