更新在烧瓶宁静API的应用程序加载的数据

问题描述 投票:0回答:1

我正在寻找在部署应用程序重新加载数据的最佳选择。最好的定义为,不应导致500秒,必须更新数据(不静默失败),应该不会阻塞太长时间的工作,但没有500S和更新的优先级。

该应用程序是一个CPU受限的应用程序,其中我通过增加更多的工人和内核,扩展。该应用程序加载在通过上启动一个listdict

api.add_resource(
Cars,
'/cars',
resource_class_kwargs={'carslist': carslist})

问题是,每24h或有时更经常的carslist变化。我可以与我送一个新的应用程序POST方法,或使其加载一个新版本等我的问题是,虽然,如果我gunicorn部署此说8名工人,我怎么能保证每个工人都有向上最新carslist

按照gunicorn文档我也可以正常启动gunicorn与HUP。因此,在重新启动应用程序并使其加载一个新carslist最好的选择,或者我怎么可以让每一个工人被称为请求?

我使用gunicorn落后于泊坞窗nginx的,而这个程序没有面向互联网,因此安全性是不是一个问题,但我确实看到在上一次第二10000S请求。

python flask gunicorn flask-restful
1个回答
1
投票

有不同的方法来你的任务,它取决于你的员工如何快速约束需要赶上新的价值观,你如何宣布他们这个值的变化,什么是您的性能需求时。什么这些解决方案的份额,是它更容易控制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已经改变。这使您可以在运行时更改值,而无需重新启动任何工人。

© www.soinside.com 2019 - 2024. All rights reserved.