【发布时间】:2019-06-04 20:07:29
【问题描述】:
我尝试创建一个任务,该任务应该在 celery 和 redis 服务器中每分钟运行一次
为了执行 redis 我跑了"redis-server"
为了执行 celery 我跑了"celery -A tasks worker --loglevel=info"
这是我的 tasks.py 文件
from celery import Celery
from celery.schedules import crontab
from celery.task import periodic_task
app = Celery('tasks', backend='redis://localhost', broker='redis://localhost')
@app.task
def add(x, y):
return x + y
@periodic_task(run_every=(crontab(minute='1')),name="run_every_minute",ignore_result=True)
def run_every_minute():
print("hehe")
return "ok"
当我在 python 控制台中运行时
from tasks.py import run_every_minute
z=run_every_minute.delay()
我在 celery 运行终端得到输出为
[2019-06-05 01:35:02,591: INFO/MainProcess] Received task: run_every_minute[06498b4b-1d13-45af-b91c-fb10476e0aa3]
[2019-06-05 01:35:02,595: WARNING/Worker-2] hehe
[2019-06-05 01:35:02,599: INFO/MainProcess] Task run_every_minute[06498b4b-1d13-45af-b91c-fb10476e0aa3] succeeded in
0.004713802001788281s: 'ok'
但这应该每分钟执行一次,因为它是一个周期性任务。这怎么可能发生。 另外,我们如何在某个特定时间执行 celery 任务,比如 5:30 GMT(例如)。
【问题讨论】:
-
该日志仅显示几毫秒,因此我们无法判断该任务是否会在一分钟后重复。
-
最后一个之后没有日志。目前是 1:47,没有新的日志条目
-
你检查run_every是否需要启动调度器Periodic Task?
-
抱歉,我没听明白?如何检查?
-
定期任务需要启动调度程序/节拍,我不知道
run_every属性是否是调度/定期任务的必要条件,请尝试在celery -A tasks worker --loglevel=info旁边执行celery -A tasks beat