芹菜,用倒计时调用延迟

Celery, calling delay with countdown

我正在尝试了解芹菜的工作原理

在我的 tasks.py 文件中的 django 应用程序中,我创建了一个任务:

@celery.shared_task(default_retry_delay=2 * 60, max_retries=2)
def my_task(param1, param2):
    # There are some operations

我使用以下代码调用此任务:

my_task.delay(param1, param2)

在这个 my_task 中有一个条件应该再次开始这个任务 但是在延迟一分钟后

我发现有一些 ETA and countdown 的任务,但他们的例子只有 apply_async

是否可以为 delay 使用某种倒计时?

来自basic part of celery Calling documentation

delay(*args, **kwargs)

Shortcut to send a task message, but doesn’t support execution options.

So delay is clearly convenient, but if you want to set additional execution options you have to use apply_async.

如文档所述 delay 不能与其他选项集一起使用,因此您应该将调用转换为 apply_async

如果你想添加执行选项,文档建议你使用签名。例如:

my_task.s(arg1, arg2).apply_async(countdown=60)

只是添加到 iklinac 的回答中。这就是使用 apply_async()

调用任务的方式
my_task.apply_async(args=(param1, param2), countdown=60)

my_task.apply_async(kwargs={'param1':param1, 'param2':param2}, countdown=60)

如果您使用 Flower 等工具进行监控,第二个选项将真正派上用场。您可以查看 Celery tasks best practices 页面以获取其他提示。