我正在寻找在部署应用程序重新加载数据的最佳选择。最好的定义为,不应导致500秒,必须更新数据(不静默失败),应该不会阻塞太长时间的工作,但没有500S和更新的优先级。
该应用程序是一个CPU受限的应用程序,其中我通过增加更多的工人和内核,扩展。该应用程序加载在通过上启动一个list
或dict
api.add_resource(
Cars,
'/cars',
resource_class_kwargs={'carslist': carslist})
问题是,每24h或有时更经常的carslist变化。我可以与我送一个新的应用程序POST方法,或使其加载一个新版本等我的问题是,虽然,如果我gunicorn部署此说8名工人,我怎么能保证每个工人都有向上最新carslist
。
按照gunicorn文档我也可以正常启动gunicorn与HUP
。因此,在重新启动应用程序并使其加载一个新carslist
最好的选择,或者我怎么可以让每一个工人被称为请求?
我使用gunicorn落后于泊坞窗nginx的,而这个程序没有面向互联网,因此安全性是不是一个问题,但我确实看到在上一次第二10000S请求。
有不同的方法来你的任务,它取决于你的员工如何快速约束需要赶上新的价值观,你如何宣布他们这个值的变化,什么是您的性能需求时。什么这些解决方案的份额,是它更容易控制carlist
当它与像接口的类的对象:
class CarlistManager:
def __init__(self):
super().__init__()
self.carlist = self.update()
def update(self):
self.carlist = ... # depends on where you store a carlist
def get(self):
if not self.is_up_to_date():
self.update()
return self.carlist
def is_up_to_date(self):
# depends on how do you prefer to check for a new file version
app = Flask("app")
app.carlist_manager = CarlistManager()
api.add_resource(Cars, '/cars',
resource_class_kwargs={'carslist': app.carlist_manager})
如果你有一个数据库,你可以存储有一定的价值,就像一个最新卡洛斯的文件名,更新了新发布的文件,并检查它是否在is_up_to_date已经改变。这使您可以在运行时更改值,而无需重新启动任何工人。