Как сгруппировать несколько функций для параллельного выполнения с помощью Celery?

Я хотел сгруппировать несколько функций для параллельного выполнения в Django внутри функции transaction.on_commit - однако, я получил TypeError: cannot unpack non-iterable int object Я пытался решить эту проблему, но теперь я думаю, что я неправильно использую один из args. Вот мой первоначальный подход:

# tasks.py

def func_a(keys: tuple, link_set: dict):
    # keys contain random integers as pk
    return 


def func_b(keys: tuple, link_set: dict):
    return 


def func_c(keys: tuple, link_set: dict):
    return 

Я пытался вызвать их в своем сигнале следующим образом:

@receiver(post_save, sender=Foo)
def start_task(sender, instance, created, **kwargs):
    if created:
        ...

        keys = (instance.pk, foo.pk)
        link_set = {}
        transaction.on_commit(lambda: group([
            tasks.func_a.si(keys, link_set),
            tasks.func_b.si(keys, link_set),
            tasks.func_c.si(keys, link_set)
        ]).delay())

Три функции в tasks.py являются независимыми друг от друга без возвращаемого значения, объединение их в одну влечет за собой небольшие затраты, которых я хотел бы избежать - как лучше составить эти функции для более быстрого ответа? Спасибо

Вернуться на верх