跨多个不同站点重用Python flask代码

跨多个不同站点重用Python flask代码,python,django,performance,flask,wsgi,Python,Django,Performance,Flask,Wsgi,我有一个设置,我将有大约50个网站使用相同的代码,配置略有不同。与其在不同的文件夹和存储库中重复一遍又一遍地部署相同的代码,Flask中是否有任何方法可以将站点的工作代码作为某种库集中起来 在Django,他们有点像这样: https://docs.djangoproject.com/en/dev/ref/contrib/sites/ 一些想法 部署50个UWSGI实例,复制相同的代码和不同的配置 部署50个UWSGI实例,添加python代码作为一种模块或扩展,因此只有一个代码实例: 部署1个

我有一个设置,我将有大约50个网站使用相同的代码,配置略有不同。与其在不同的文件夹和存储库中重复一遍又一遍地部署相同的代码,Flask中是否有任何方法可以将站点的工作代码作为某种库集中起来

在Django,他们有点像这样:

https://docs.djangoproject.com/en/dev/ref/contrib/sites/

一些想法

  • 部署50个UWSGI实例,复制相同的代码和不同的配置

  • 部署50个UWSGI实例,添加python代码作为一种模块或扩展,因此只有一个代码实例:

  • 部署1个UWSGI实例,该实例只有一个代码实例并处理不同的主机名:

  • 我正在复制的代码旨在查询API并显示结果。这些地点之间的差异有两个方面:

  • 模板-虽然这些站点看起来很相似,但它们并不完全相同。它们的CSS和图像略有不同

  • API查询。大部分较小的场地用于城镇。这意味着来自这些站点的API请求将被稍微修改,以便只返回该区域的结果

    • 默认情况下,sitelondon.com可能只在伦敦查询API中的项目
    • sitehtml.com可能会在API中查询默认具有“html”关键字的项目

  • 我的目标是为用户提供性能。我将首先在一台具有2GB RAM的服务器上运行这些程序,这应该足够了。

    通常对于这些类型的场景,“基于主机的行为不同”逻辑构建在应用程序中

    因此,更好的解决方案是#3,但我的建议是不要使用appdispatch

    构建逻辑以直接在主应用程序中获取
    主机名的配置(例如,您可以在
    @before\u request
    处理程序中加载专用配置,并使用单个DB实例)。 如您所说,若您计划只使用一台小型服务器,那个么这个解决方案将不会占用太多资源


    50个不同的uWSGI实例及其自己的进程将填满您的内存并轻松开始交换。

    通常对于这些类型的场景,“基于主机的行为不同”逻辑构建在应用程序中

    因此,更好的解决方案是#3,但我的建议是不要使用appdispatch

    构建逻辑以直接在主应用程序中获取
    主机名的配置(例如,您可以在
    @before\u request
    处理程序中加载专用配置,并使用单个DB实例)。 如您所说,若您计划只使用一台小型服务器,那个么这个解决方案将不会占用太多资源

    50个不同的uWSGI实例及其各自的进程将填满您的内存,并可以轻松地开始交换。

    我同意@Paolo的观点,即#3是您的最佳选择

    通过在web服务器中重写URL,您可以进一步简化它。如果您重写URL,以便查询
    http://sitelondon.com/example
    变为
    http://sitelondon.com/london/example
    ,以及对
    http://sitehtml.com/example
    变为
    http://sitehtml.com/html/example
    然后,您可以通过以下路线轻松访问站点:

    @app.route('/<site>/example')
    def example(site):
        return render_template(site + '/example.html')
    
    @app.route(“//示例”)
    def示例(站点):
    返回render_模板(site+'/example.html')
    
    使用此设置,您可以根据站点名称将模板组织到子文件夹中,然后选择合适的模板就成了构建模板路径的问题

    我希望这有帮助

    我同意@Paolo的观点,3是你最好的选择

    通过在web服务器中重写URL,您可以进一步简化它。如果您重写URL,以便查询
    http://sitelondon.com/example
    变为
    http://sitelondon.com/london/example
    ,以及对
    http://sitehtml.com/example
    变为
    http://sitehtml.com/html/example
    然后,您可以通过以下路线轻松访问站点:

    @app.route('/<site>/example')
    def example(site):
        return render_template(site + '/example.html')
    
    @app.route(“//示例”)
    def示例(站点):
    返回render_模板(site+'/example.html')
    
    使用此设置,您可以根据站点名称将模板组织到子文件夹中,然后选择合适的模板就成了构建模板路径的问题


    我希望这有帮助

    这一切都取决于你实际上在做什么。您是将数据存储在共享的数据库中还是存储在不同的数据库中?相同的数据库、稍有不同的模板和稍有不同的配置(用于控制应用程序如何查询API),但除此之外,所有代码都是相同的。如果是这种情况,下面的Paolo是正确的。对于50多个uWSGI实例,2GB不是很多。如果只有几处不同,就用代码来做。没有“正确的方法”来回答这个问题。这在很大程度上取决于您正在复制的实际代码(只是一些实用程序函数,或者站点的数据库模式/模板是否几乎完全相同)资源(您是部署到一台主机还是多台主机)等等。这里有太多不同的变量,一种方法是正确的。我试图编辑它以获得更多的信息,这有帮助吗?这取决于你实际做了什么。您是将数据存储在共享的数据库中还是存储在不同的数据库中?相同的数据库、稍有不同的模板和稍有不同的配置(用于控制应用程序如何查询API),但除此之外,所有代码都是相同的。如果是这种情况,下面的Paolo是正确的。对于50多个uWSGI实例,2GB不是很多。如果只有几处不同,就用代码来做。没有“正确的方法”来回答这个问题。这在很大程度上取决于您复制的实际代码(只是一些实用程序函数)