我正在使用Django 1.10和Celery编写应用程序。 我试图在芹菜中创建一个可以通过 Django 启动和停止的循环。
我的想法看起来像这样(非常简单(:
_run = False
def do_work():
global _run
while _run:
# Do something
@app.task
def start():
global _run
_run = True
do_work()
@app.task
def stop():
global _run
_run = False
问题是芹菜通常在>1 工作线程中运行,并且线程之间无法访问_run。
问题:实现该功能的最佳方法是什么? 我正在考虑设置数据库变量,但恐怕这不是最好的方法。
一种可能的方法是创建将永远运行的任务,然后在请求时停止它。
from proj.celery import app
app.control.revoke(task_id)
http://docs.celeryproject.org/en/latest/faq.html#can-i-cancel-the-execution-of-a-task