【问题标题】:Run periodic celery task with a dynamic schedule in django application在 django 应用程序中使用动态计划运行定期 celery 任务
【发布时间】:2022-11-11 11:22:03
【问题描述】:

我想知道是否可以让我的最终用户动态调整定期任务的时间表。

所以沿着这些思路:

# celery.py

def get_schedule():
    config = get_user_config()  # returns a model object of sorts
    return config.frequency_in_seconds

app.conf.beat_schedule = {
    'my_periodic_task': {
        'task': 'my_periodic_task',
        'schedule': get_schedule,  # schedule updated based on `get_schedule` function
    },
}

这样,如果用户要更改其用户配置设置中的 frequency_in_seconds 字段,它将动态更新节拍时间表。

我的偏好是在 Django Admin 站点之外执行此操作,并且没有任何其他软件包(例如 django-celery-beat)。

任何想法或想法将不胜感激。

谢谢

【问题讨论】:

    标签: django celery django-celery django-celery-beat


    【解决方案1】:

    如果您使用 django,您可以使用django-celery-beat 允许最终用户使用 django 管理面板控制日程安排。

    【讨论】:

    • 感谢您的建议,但我希望在没有 django-celery-beat 的情况下完成此操作,如上所述。
    【解决方案2】:

    如果你使用 redis 作为你的结果后端,你可以在这里使用这个库https://github.com/parad0x96/django-redbeat

      1. 创建动态周期性任务。:
    from django_redbeat import PeriodicTaskEntry
    
    task = PeriodicTasksEntry.objects.create(
           name="The verbose name of the task",
           task="yourapp.tasks.task_name",
           args=[arg1, arg2,],
           schedule=10# the schedule in seconds
    )
    

    这将创建一个动态的定期任务,您也可以控制日程安排和创建。

      1. 像这样运行 Celery beat:

    celery -A your_app_name beat -l INFO -S redbeat.RedBeatScheduler --max-interval 10

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-17
      • 2012-05-09
      • 2017-08-12
      • 2019-06-28
      • 2015-12-25
      • 2011-07-18
      • 2017-09-22
      • 2020-09-07
      相关资源
      最近更新 更多