繁体   English   中英

Flask + uwsgi + 线程

[英]Flask + uwsgi + threading

我有一个 Flask 应用程序,我想通过线程每分钟执行一次更新任务。

线程设置如下:

def print_thread():
    print "I am a thread"

@app.before_first_request
def start_thread():
    threading.Timer(60, print_thread).start()

uwsgi应用程序通过uwsgi运行:

uwsgi_python -s /tmp/uwsgi.sock --processes 1 --threads 4 -w app:app --enable-threads

我之前遇到过这个问题,并通过通过cron每分钟调用一个flask端点来解决它,但我想要一个更干净的解决方案,它自包含在flask应用程序中。

任何人都可以识别问题吗?

或者知道一个干净的解决方案来解决这个问题?

谢谢

我建议避免在与通过 WSGI 创建的烧瓶实例相同的进程中运行后台任务。 这使您可以确保通过 uwsgi 创建的多个进程\\线程,后台任务不会重复。

您可以从不同的文件启动单独的 python 进程并使用 python 计划,例如, apscheduler

from apscheduler.schedulers.background import BlockingScheduler

from app import create_app # Your app factory
from app import job # A job function

# Most probably, your background job will depend on your app being initialized
# If you don't use the app factory pattern, you can simply import a file containing your app to trigger initialization. 
app = create_app() 

scheduler = BlockingScheduler()
scheduler.add_job(job, 'interval', minutes=1)

scheduler.start()

然后,您可以将此脚本放在 app.py 旁边,并使用python your_name.py启动一个进程,并使其与 uwsgi 一起运行。 通过这种方式,您的 Web 应用程序和后台任务将共享代码和配置,但进程将明确分开。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM