芹菜周期性任务不是周期性的
Celery periodic task not periodic
我尝试创建一个任务,该任务应该 运行 在 celery 和 redis 服务器中每分钟
执行redis I 运行 "redis-server"
执行芹菜我运行"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 运行ning 终端得到输出
[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(例如)。
正在回答您最后的评论:
run_every=(crontab(minute='1'))
您已指定 'minute of hour' = 1,因此 celery beat 每小时在“1”分钟运行您的周期性任务,例如00:01、01:01 等等。
您应该为您的 crontab 设置 hour
属性,可能是一个范围
好的,根据评论
首先 periodic_task
需要启动 scheduler/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
将在每小时一分钟发送任务
我尝试创建一个任务,该任务应该 运行 在 celery 和 redis 服务器中每分钟
执行redis I 运行 "redis-server"
执行芹菜我运行"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 运行ning 终端得到输出
[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(例如)。
正在回答您最后的评论:
run_every=(crontab(minute='1'))
您已指定 'minute of hour' = 1,因此 celery beat 每小时在“1”分钟运行您的周期性任务,例如00:01、01:01 等等。
您应该为您的 crontab 设置 hour
属性,可能是一个范围
好的,根据评论
首先 periodic_task
需要启动 scheduler/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
将在每小时一分钟发送任务