Получение "_pickle.PicklingError: Can't pickle <function>: it's not the same object" для декоратора django-q async_task

Я пытаюсь создать декоратор, который я могу применить к любой функции, чтобы сделать ее асинхронной задачей django-q. Декоратор написан следующим образом

def django_async_task(func):
    """Django Q async task decorator."""

    def wrapper(*args, task_name):
        return django_q.tasks.async_task(func, *args, task_name=task_name)

    return wrapper

Тогда я могу использовать вышеупомянутый декоратор в любой задаче, как показано ниже

@django_async_task
def my_task(a):
    print(f'Hello {a}')

task_id = my_task('Vidu', task_name='task1')

Однако я не могу заставить вышеуказанное работать, так как получаю _pickle.PicklingError: Can't pickle <function my_task at 0x7f3dc084be50>: it's not the same object as tests.my_task

Я попробовал functools wraps как показано ниже, но это не дало никакого эффекта.

def django_async_task(func):
    """Django Q async task decorator."""

    @functools.wraps(func)
    def wrapper(*args, task_name):
        return django_q.tasks.async_task(func, *args, task_name=task_name)

    return wrapper

Я также попробовал использовать класс-декоратор, но и это не решило проблему.

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