我有一个使用gunicorn部署的Flask应用程序。我想使用kazoo将该应用程序与Zookeeper集成,因为该应用程序依赖于在其中一个Znodes上调用get_children()获得最新数据。
一个选择是让应用程序每次使用数据之前都获取数据。数据不会经常改变,所以这是低效的。我想在应用程序启动时调用get_children()和一个watch函数,而不是轮询Zookeeper,以便在数据发生变化时调用该watch函数。
我的问题是,我在哪里有效地设置这个watch函数,以确保它会在应用程序运行时被调用?我应该在应用程序的主文件(传递给gunicorn命令的文件)中设置它吗?我想我很困惑,当应用程序在gunicorn中运行时,哪个线程将运行watch函数。
1条答案
按热度按时间k97glaaz1#
我在进一步的研究中找到了答案。kazoo库允许在创建KazooClient对象时传递一个handler对象。默认的handler是SequentialThreadingObject,它将在kazoo创建的线程中运行watch函数,该线程独立于主线程。
SequentialThreadingHandler在我的Flask + gunicorn设置中工作。当使用此处理程序时,每个gunicorn工作进程将为watch函数创建单独的线程。