有没有办法在每个uwsgi工作程序中运行初始化代码(在分叉后)

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

有没有办法(在uWSGI或Flask中)注册一个函数,以便在产生后尽快在每个工人中运行?

我们有一个烧瓶应用程序,可以从预加载一堆东西中获益。以下仅针对8个工作进程调用preload一次。第一个请求很快,但预加载的对象以某种方式共享,导致错误。

app = Flask(__name__)
preload()

如果我使用before_first_request,那么在每个工作进程中加载​​对象并且没有错误,但第一个请求非常慢。

app = Flask(__name__)

@app.before_first_request
def bfr():
    preload()

我也试过设置一个烧瓶脚本。运行该命令有效,但显然对象是在命令的进程中加载​​而不是uwsgi worker。

app = Flask(__name__)
manager = Manager(app)

@manager.command
def preload():
    ...

我想如果我们使用before_first_request,我们可以在重启uwsgi后手动触发请求。这是唯一的解决方案吗?

编辑:刚刚找到了uwsgi qazxsw poi选项(以及其他钩子选项)。我明天会试试。也许其中一个是我需要的。

python flask uwsgi flask-script
1个回答
1
投票

hook-post-fork装饰师为我工作,只是花了一点时间找到。

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