Получение "_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
Я также попробовал использовать класс-декоратор, но и это не решило проблему.