在使用协程的时候一定加了很多的异常,但百密而一疏,总是会有想象不到的异常发生,这个时候为了不让程序整体崩溃应该使用协程的额外异常处理方法,这个方法会去执行绑定的回调函数.
g_dict=dict{}
g = gevent.spawn(self._g_fetcher, feed_name) # 创建协程
g_dict[feed_name] = [g,False]
g.link_exception(self._link_exception_callback) # 给该协程添加出现处理不了的异常时候的回调函数
def _link_exception_callback(self, g):
# 可能遇到无法修复的错误,需要修改代码 todo 报警
# 可以在这个函数里面做一些错误异常的打印,或者文件的关闭,连接的关闭.
self.terminated_flag = True # 停止整个程序 让 supervior重启
logger.info("_link_exception_callback {0} {1}".format(g, g.exception))
self._kill_sleep_gevent() # 轮询结束休眠的协程
def _kill_sleep_gevent(self):
for i,is_sleep in g_dict.items():
if is_sleep[1] == "True":
gevent.kill(is_sleep[0])
网友评论