[英]How to stop an infinite loop on the outside?
考虑一下情况:我有类(第三方库)和使用无限循环的方法:
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()
还有其他方法吗?
问:“如何阻止外面的无限循环”
答:阅读使用无限循环的方法/类的文档,并查看是否有任何影响其运行方式的参数。
对于您的用例,它看起来像您应该只能将timeout参数传递给TwythonStreamer
构造函数...
除了mcgilson正确的答案,你可以添加一个属性描述符,如:
def toggle_connect(self, singleton=[True]):
singleton[0] = not singleton[0]
return singleton
and after:
worker=Worker()
Worker.connected = property(toggle_connect)
您应该可以执行以下操作:
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()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.