【问题标题】:How to pragmatically schedule Celery task with dynamic inputs?如何使用动态输入务实地安排 Celery 任务?
【发布时间】:2012-07-12 01:47:59
【问题描述】:

我有这种情况,需要务实的调度一个任务,而任务定义每次需要执行时都需要一定的输入参数。考虑以下任务函数:

@task
def add_numbers(a, b):
   sum = a + b
   return sum

现在,如果我需要在两个不同的时间实例使用不同的输入参数(例如 T1->add_numbers(4,5) 和 T2->add_numbers(2,2))运行上述任务,我该怎么做。感谢您的帮助。

环境:Django 1.4,Celery 3.0

【问题讨论】:

  • 汗先生您好,我们也在尝试使用 celery 分配和安排我们的工作。我们需要在运行时安排或重新安排任务。此要求似乎与您在问题中提到的要求非常相似。我只是想检查一下你在哪里可以解决这个问题。谢谢,侯赛因·博拉

标签: python django celery django-celery


【解决方案1】:

我也遇到了这个问题,我想还有另一种方法可以帮助你。 @narced133 的答案只有在参数变化有限的情况下才有效,那么如果我们有数千种参数怎么办?

解决方案: 重构您的celery task 以接受一个函数作为参数,该函数将生成或获取作为您的celery task 的真正参数的参数:add_numbers

【讨论】:

    【解决方案2】:

    有关如何以指定间隔调用带有参数的任务的示例,请参阅有关周期性任务的 Celery 文档。 http://docs.celeryproject.org/en/latest/userguide/periodic-tasks.html#entries

    在您的示例中,您可以使用以下内容:

    from celery.schedules import crontab
    
    CELERYBEAT_SCHEDULE = {
        'T1': {
            'task': 'tasks.add_numbers',
            'schedule': crontab(hour=7, minute=30, day_of_week=1),,
            'args': (4, 5)
        },
        'T2': {
            'task': 'tasks.add_numbers',
            'schedule': crontab(hour=16, minute=0),,
            'args': (2, 2)
        },
    }
    

    【讨论】:

    • 感谢@narced133 的指导。是否会尝试更新。
    猜你喜欢
    • 2012-01-16
    • 1970-01-01
    • 2019-10-20
    • 1970-01-01
    • 1970-01-01
    • 2010-12-31
    • 1970-01-01
    • 2020-02-27
    相关资源
    最近更新 更多