如何优雅的在 FLASK 初始化 app 时提交一个后台任务?

2019-12-18 18:16:19 +08:00
 Latin

目前做法是这样,请各位大佬指教。

thread_lock = Lock()
thread = None

def create_app():
    ...
    register_consumer(app)
    return app
    
    
def register_consumer(app):
    global thread
    if not app.debug:
        with thread_lock:
            executor = ThreadPoolExecutor(1)
            thread = executor.submit(alarmHandle, app)
3845 次点击
所在节点    Python
6 条回复
renmu
2019-12-18 20:51:58 +08:00
before_first_request 装饰器
Latin
2019-12-19 09:16:49 +08:00
@renmu 就是为了避免请求触发
wzwwzw
2019-12-19 09:34:30 +08:00
如果要用 gunicorn 的话要避免多次启动这个线程。
我目前的做法是绑定一个端口,启动 apscheduler 和 一些其他的线程。
Latin
2019-12-19 11:26:14 +08:00
@wzwwzw 主要这是个消費任务,不想放在 celery 或者 apscheduler 内跑定时 job
15399905591
2019-12-20 12:21:21 +08:00
如果用 uwsgi 的话,单独挂载一个 mule
slipper
2019-12-25 15:02:54 +08:00
用 flask_script 这个包。继承 server 类,重写__call__方法,在这个方法里面实现你所要提前启动的代码。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/630265

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX