是否可以在特定时间运行 django celery crontab 非常 30 秒?
只有分钟、小时和天的设置。
我有 crontab 工作,但我想每 30 秒运行一次,而不是每分钟运行一次。
或者...
是否可以将间隔打开 30 秒,然后仅在一天中的特定时段打开间隔时间表?
是否可以在特定时间运行 django celery crontab 非常 30 秒?
只有分钟、小时和天的设置。
我有 crontab 工作,但我想每 30 秒运行一次,而不是每分钟运行一次。
或者...
是否可以将间隔打开 30 秒,然后仅在一天中的特定时段打开间隔时间表?
他们在文档中的第一个例子是......
示例:每 30 秒运行一次 tasks.add 任务。
from datetime import timedelta CELERYBEAT_SCHEDULE = { "runs-every-30-seconds": { "task": "tasks.add", "schedule": timedelta(seconds=30), "args": (16, 16) }, }
如果你真的需要这样做并且你需要一个快速的解决方案,你可以求助于添加:sleep 到你的脚本中。(显然,您需要在脚本中添加一个参数以将睡眠时间设置为 0 或 30 秒,并将脚本两次添加到 crontab,一次使用 0 作为参数,第二次使用 30)。
请不要对我投反对票!这是一个解决方案,尽管我很清楚这不是一个理想的解决方案。
你可以使用
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`
这将每 30 秒运行一次该函数,但它只会在当前时间的小时值为 12 或 9 时运行您的代码。
我会通过安排另一个任务来启用/禁用主要任务来使用您的替代解决方案:
# 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