我怎样才能安全地结束python脚本

时间:2016-02-23 19:15:12

标签: python json

我有一个父脚本通过线程同时运行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打开它。

2 个答案:

答案 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即可彻底停止该线程。