如何在uwsgi烧瓶应用程序中将函数作为后台线程运行?

时间:2018-06-04 21:11:21

标签: flask uwsgi

我想在第三方(公共证书)中获取数据并将其写入文件或数据库,从而实现一个函数(下面代码中的update_cert())。 这个数据应该由我的烧瓶应用程序使用(以验证访问令牌的签名)。

我希望将此函数作为后台进程运行,该进程在应用程序的生命周期内在一个线程中运行。

我尝试在app.py中的调度程序中实现此功能。但是uWSGI会在每个worker的初始化过程中多次生成它。我担心这会使我的应用程序线程不安全。

实施这一概念的正确方法是什么。以下是我的app.py。

import os
from flask import Flask
from flask_restful import Api
from resources.user import UserRegister
from resources.matchingJob import MatchingJob
from resources.client import Client
from models.configs import ConfigModel


app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = os.environ.get('DATABASE_URL')
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

api = Api(app)

api.add_resource(UserRegister, '/register')
api.add_resource(MatchingJob, '/job', '/job/<string:matching_uuid>')
api.add_resource(Client, '/client', '/client/<string:matching_uuid>')


@app.before_first_request
 def update_cert():
    url_to_get_cert = <url>
    trust_path = '/etc/pki/tls/certs/ca-bundle.crt'
    cert = requests.get(url_to_get_cert, verify=trust_path).text
    cls.update('CERT', cert)

1 个答案:

答案 0 :(得分:0)

尝试在执行Thread的情况下启动update_cert,然后再运行time.sleep(seconds)(正如您所说,您希望它在应用程序的整个生命周期中都运行此程序,所以我了解您希望它定期运行),并在app = Flask(__name__)行之前启动此线程。