Django и Celery: не удается выполнить задачу kombu.exceptions.EncodeError
У меня есть асинхронная задача Celery recalculate_emissions_task.delay(assessment, answers,reseller, user)
где параметрами являются все объекты Django, моя функция задачи определена следующим образом
@app.task @transaction.atomic
def recalculate_emissions_task(assessment, answers, reseller, requesting_user=None):
for ans in answers:
approver = None
if ans.is_approved:
approver = ans.approver
auto_approved = ans.auto_approved
auto_approval_notes = ans.auto_approval_notes
ans.unapprove()
ans.report_upstream_emissions = ans.scope in assessment.scopes_for_upstream
ans.report_transmission_and_distribution = assessment.report_transmission_and_distribution
ans.for_mbi_assessment = assessment.uses_mbi
if approver:
ans.approve(
approver,
auto_approved=auto_approved,
auto_approval_notes=auto_approval_notes
)
else:
ans.save()
и ошибка, которую я получаю:
Traceback (most recent call last):
File "dir/bin/django-python.py", line 18, in <module>
runpy.run_path(path, run_name='__main__')
File "/usr/lib/python3.8/runpy.py", line 265, in run_path
return _run_module_code(code, init_globals, run_name,
File "/usr/lib/python3.8/runpy.py", line 97, in _run_module_code
_run_code(code, mod_globals, init_globals,
File "/usr/lib/python3.8/runpy.py", line 87, in _run_code
exec(code, run_globals)
File "test.py", line 15, in <module>
recalculate_emissions_task.delay(assessment, answers,reseller, user)
File "dir/lib/python3.8/site-packages/celery/app/task.py", line 427, in delay
return self.apply_async(args, kwargs)
File "dir/lib/python3.8/site-packages/celery/app/task.py", line 566, in apply_async
return app.send_task(
File "dir/lib/python3.8/site-packages/celery/app/base.py", line 756, in send_task
amqp.send_task_message(P, name, message, **options)
File "dir/lib/python3.8/site-packages/celery/app/amqp.py", line 543, in send_task_message
ret = producer.publish(
File "dir/lib/python3.8/site-packages/kombu/messaging.py", line 167, in publish
body, content_type, content_encoding = self._prepare(
File "dir/lib/python3.8/site-packages/kombu/messaging.py", line 252, in _prepare
body) = dumps(body, serializer=serializer)
File "dir/lib/python3.8/site-packages/kombu/serialization.py", line 221, in dumps
payload = encoder(data)
File "/usr/lib/python3.8/contextlib.py", line 131, in __exit__
self.gen.throw(type, value, traceback)
File "dir/lib/python3.8/site-packages/kombu/serialization.py", line 54, in _reraise_errors
reraise(wrapper, wrapper(exc), sys.exc_info()[2])
File "dir/lib/python3.8/site-packages/vine/five.py", line 194, in reraise
raise value.with_traceback(tb)
File "dir/lib/python3.8/site-packages/kombu/serialization.py", line 50, in _reraise_errors
yield
File "dir/lib/python3.8/site-packages/kombu/serialization.py", line 221, in dumps
payload = encoder(data)
File "dir/lib/python3.8/site-packages/kombu/serialization.py", line 350, in pickle_dumps
return dumper(obj, protocol=pickle_protocol)
kombu.exceptions.EncodeError: Can't pickle local object 'Answer._lazy_build_emissions.<locals>.fn'
При синхронном выполнении задачи ошибок не возникает. Заранее спасибо