Django芹菜crontab每30秒 - 它甚至可能吗?

时间:2012-05-15 08:25:08

标签: django scheduled-tasks crontab celery

是否可以在30秒内运行django芹菜crontab 在特定时间

只有分钟,小时和天的设置。

我有crontab工作,但我想每隔30秒运行一次,而不是每分钟运行一次。

另外...

是否可以将间隔开启30秒,并且仅在一天的特定时段启用间隔时间表?

4 个答案:

答案 0 :(得分:9)

Very first example they have in the documentation is ...

  

示例:每30秒运行一次tasks.add任务。

from datetime import timedelta

CELERYBEAT_SCHEDULE = {
    "runs-every-30-seconds": {
        "task": "tasks.add",
        "schedule": timedelta(seconds=30),
        "args": (16, 16)
    },
}

答案 1 :(得分:3)

如果真的需要这样做并且您需要快速解决方案,您可以求助于添加:     睡觉 进入你的脚本。 (显然,您需要在脚本中添加一个参数,将睡眠时间设置为0或30秒,并将脚本添加两次到crontab,一次以0作为参数,其次是30)。

请不要在此投票给我!这是一个解决方案,尽管我已经明确表示这不是一个理想的解决方案。

答案 2 :(得分:1)

我会通过安排另一项任务启用/禁用主要任务来使用您的替代解决方案:

# tasks.py
from djcelery.models import PeriodicTask

@app.task
def toggle_thirty_second_task:
    # you would use whatever you named your task below
    thirty_second_tasks = PeriodicTask.objects.filter(name='runs-every-30-seconds')
    if thirty_second_tasks:
        # this returned an array, so we'll want to look at the first object
        thirty_second_task = thirty_second_tasks[0]
        # toggle the enabled value
        thirty_second_task.enabled = not thirty_second_task.enabled
        thirty_second_task.save()

然后,只需使用crontab计划此任务,即可切换所需的小时数。或者,你可以安排一个任务打开它,一个关闭它而不处理切换逻辑。

希望这有帮助。

SC

答案 3 :(得分:0)

您可以使用

from datetime import timedelta

@periodic_task(run_every=timedelta(seconds=30))
def thirty_second_task():
   now = datetime.now()
   if now.hour == 12 or now.hour == 9:
       your code goes here`

这将每三十秒运行一次该函数,但是仅当当前时间的小时值为12或9时,它才会运行您的代码。