gpt4 book ai didi

python - celery 周期性任务不是周期性的

转载 作者:可可西里 更新时间:2023-11-01 11:12:22 25 4
gpt4 key购买 nike

我试图创建一个应该在 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 running 终端得到的输出是

[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(例如)。

最佳答案

好的,根据评论

首先 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 将在每小时的第 1 分钟发送任务

关于python - celery 周期性任务不是周期性的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56450651/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com