从使用gunicorn部署的Flask应用程序调用Zookeeper时使用kazoo设置watch函数

mw3dktmi  于 5个月前  发布在  Apache
关注(0)|答案(1)|浏览(79)

我有一个使用gunicorn部署的Flask应用程序。我想使用kazoo将该应用程序与Zookeeper集成,因为该应用程序依赖于在其中一个Znodes上调用get_children()获得最新数据。
一个选择是让应用程序每次使用数据之前都获取数据。数据不会经常改变,所以这是低效的。我想在应用程序启动时调用get_children()和一个watch函数,而不是轮询Zookeeper,以便在数据发生变化时调用该watch函数。
我的问题是,我在哪里有效地设置这个watch函数,以确保它会在应用程序运行时被调用?我应该在应用程序的主文件(传递给gunicorn命令的文件)中设置它吗?我想我很困惑,当应用程序在gunicorn中运行时,哪个线程将运行watch函数。

k97glaaz

k97glaaz1#

我在进一步的研究中找到了答案。kazoo库允许在创建KazooClient对象时传递一个handler对象。默认的handler是SequentialThreadingObject,它将在kazoo创建的线程中运行watch函数,该线程独立于主线程。
SequentialThreadingHandler在我的Flask + gunicorn设置中工作。当使用此处理程序时,每个gunicorn工作进程将为watch函数创建单独的线程。

相关问题