我使用kazoo = 2.2.1,python 2.7,zookeeper 3.4.5--1。 我已经设置了一个DataWatch,如果回调引发异常,我想中止该程序。我无法使用以下代码中止
from kazoo.recipe.watchers import DataWatch
from utils.zookeeper import Zookeeper
import time
import sys
def do_stuff(data, stat):
raise NotImplementedError("abort")
def wrap_do_stuff(data, stat):
try:
do_stuff(data, stat)
except Exception as e:
if data != '':
print e.message
# This does not exit the program
# sys.exit(-1)
# This does not exit the program
# raise e
# This does not exit the program, just stop the watcher
return False
def start():
zookeeper_client = Zookeeper.init_from_config().client
# Someone is writing into this node after creation
new_node_path = zookeeper_client.create('/test/',
ephemeral=True, sequence=True)
path_to_watch = new_node_path
print path_to_watch
datawatcher = DataWatch(zookeeper_client, path_to_watch, wrap_do_stuff)
while True:
time.sleep(2)
print "still alive"
if __name__ == '__main__':
start()
`
如何在wrap_do_stuff()
中止?
答案 0 :(得分:0)
DataWatch在一个单独的线程中运行,并且有一些特定方法可以从线程中终止主进程,请参阅Why does sys.exit() not exit when called inside a thread in Python?
像os._exit()
之类的东西确实有效。