如何每秒执行一次任务?

时间:2014-03-09 20:21:36

标签: django celery django-celery

我有这个:

eta_date = date.today()
eta = datetime.combine(eta_date, time.max)
scheduled_task.apply_async(eta=eta)

scheduled_tasks:

@task
def scheduled_task():
    for obj in ModelData.objects.all():
        send_data(obj)

send_data函数将对象作为JSON发送到其他服务器。我用芹菜。我希望在一天结束时启动任务,但是这样一个对象每秒发送一次。怎么做?

2 个答案:

答案 0 :(得分:2)

allcaps已经在评论部分告诉了你答案,但无论如何我都会回答这个问题。只需在send_data之后添加一个睡眠,等待X秒。

import time

@task
def scheduled_task():
    for obj in ModelData.objects.all():
        send_data(obj)
        time.sleep(1)  # You can also use a float here if 1 second is too long

答案 1 :(得分:0)

另一种选择可能是在ModelData中为每个obj生成一个任务,并将其限制设置为1s。

@task
def scheduled_task():
    for obj in ModelData.objects.all():
        send_data_task.delay(obj)

@task(rate_limit='1/s')
def send_data_task(obj):
    send_data(obj)