【问题标题】:Celery periodic task not periodic芹菜定期任务不定期
【发布时间】: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

标签: python redis celery


【解决方案1】:

好的,根据评论

首先periodic_task 需要启动调度程序/beat (Periodic Tasks),调度程序将根据run_every 参数发送任务

celery -A tasks beat

接下来,如果你需要每分钟发送一次节拍,你需要 crontab 是这样的

@periodic_task(run_every=(crontab(minute='*')),name="run_every_minute",ignore_result=True)
def run_every_minute():
    print("hehe")
    return "ok"

minute='*' 将每分钟发送一次任务。 minute=1 将在每小时一分钟发送任务

【讨论】:

    【解决方案2】:

    回答您的上一条评论:

    run_every=(crontab(minute='1'))
    

    您已指定“分钟的一小时”= 1,因此 celery beat 每小时在“1”分钟运行您的周期性任务,例如00:01、01:01 等等。

    您应该为您的 crontab 设置 hour 属性,可能是一个范围

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-30
      • 2017-04-11
      • 2018-07-16
      • 2020-09-08
      • 1970-01-01
      • 2016-08-18
      • 1970-01-01
      相关资源
      最近更新 更多