我可以使用芹菜来完成每秒钟的任务吗?

eug*_*ene 2 celery

我每秒都在运行一个任务,而 celery 似乎并不是每秒都实际执行该任务。

我猜想 celery 对于每 1 分钟的任务来说可能是一个很好的调度程序,但可能不足以满足每第二个任务的需要。

这是说明我的意思的图片。

在此输入图像描述

我正在使用以下选项

     'schedule': 1.0,
     'args': [],
     'options': {
         'expires': 3
     }
Run Code Online (Sandbox Code Playgroud)

我正在使用芹菜 4.0.0

cod*_*321 5

是的,Celery 实际上处理的时间低至 1 秒,而且可能更低,因为它需要浮动。请参阅文档中的周期性任务条目http://docs.celeryproject.org/en/latest/userguide/periodic-tasks.html

from celery import Celery
from celery.schedules import crontab

app = Celery()

@app.on_after_configure.connect
def setup_periodic_tasks(sender, **kwargs):
    # Calls test('hello') every 10 seconds.
    sender.add_periodic_task(10.0, test.s('hello'), name='add every 10')

    # Calls test('world') every 30 seconds
    sender.add_periodic_task(30.0, test.s('world'), expires=10)

    # Executes every Monday morning at 7:30 a.m.
    sender.add_periodic_task(
        crontab(hour=7, minute=30, day_of_week=1),
        test.s('Happy Mondays!'),
    )

@app.task
def test(arg):
    print(arg)
Run Code Online (Sandbox Code Playgroud)

更好的编写示例可以在https://github.com/celery/celery/issues/3589的 1/3 处找到:

# file: tasks.py
from celery import Celery

celery = Celery('tasks', broker='pyamqp://guest@localhost//')

@celery.task
def add(x, y):
    return x + y


@celery.on_after_configure.connect
def add_periodic(**kwargs):
    celery.add_periodic_task(10.0, add.s(2,3), name='add every 10')
Run Code Online (Sandbox Code Playgroud)

sender实际的 Celery 经纪人也是如此,即app = Celery()