我有一个父脚本通过线程同时运行10个子脚本。
每个子节点都是来自API的数据记录器,位于while True:
循环上,并保存有关json文件中数据的数据。当代码被扼杀时,json有时会失去完整性并且看起来像这样:
["2016_02_21_18_46_41", 1], ["2016_02_21_18_46_42", 1], ["2016_02_21_18_46_4
表示无法使用json.loads
打开它。
答案 0 :(得分:2)
您可以将while True
更改为
should_run = True
while should_run:
并在想要优雅地关闭它时将should_run更改为False。如果你用CTRL + C停止你的脚本,你应该用这个
包围它try:
somthing()
except KeyboardInterrupt:
should_run = False
如果线程不是守护程序线程,那么程序将在退出
之前等待它们完成答案 1 :(得分:1)
您可以使用线程事件,这些事件是您可以在线程循环外部设置的标志:
返回新事件对象的工厂函数。一个事件管理一个 可以使用set()方法设置为true并重置为false的标志 使用clear()方法。 wait()方法一直阻塞,直到标志为止 真。
在线程类init中声明一个线程事件:
self._stopevent = threading.Event()
向您的线程类添加以下方法:
def stop_thread(self):
self._stopevent.set()
在while循环中:
while not self._stopevent.isSet():
然后只需调用stop_event即可彻底停止该线程。