use*_*022 5 python multithreading flask uwsgi
我有一个烧瓶应用程序,我想通过一个线程每分钟执行一次更新任务.
该线程设置如下:
def print_thread():
print "I am a thread"
@app.before_first_request
def start_thread():
threading.Timer(60, print_thread).start()
Run Code Online (Sandbox Code Playgroud)
烧瓶应用程序正在运行uwsgi:
uwsgi_python -s /tmp/uwsgi.sock --processes 1 --threads 4 -w app:app --enable-threads
Run Code Online (Sandbox Code Playgroud)
我之前遇到过这个问题并通过一个flask每分钟通过调用一个端点来解决它cron,但我想要一个自包含在flask应用程序中的清洁解决方案.
任何人都可以发现问题吗?
或者知道一个干净的解决方案来解决这个问题?
谢谢
小智 0
我建议避免在与通过 WSGI 创建的 Flask 实例相同的进程中运行后台任务。这使您可以确保通过 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()
Run Code Online (Sandbox Code Playgroud)
然后,您可以将此脚本放在 app.py 旁边,并启动一个进程
python your_name.py并使其与 uwsgi 一起运行。这样,您的 Web 应用程序和后台任务将共享代码和配置,但进程将清晰分开。