Параметры сельдерея shared_task неверны при разборе - PullRequest
0 голосов
/ 21 ноября 2018

Я использую Celery 4.2.0 с Django для планирования новых задач в rabbitmq, и он случайно завершается неудачно, когда дело доходит до разбора аргументов.Мой код выглядит так:

for param in serializer.validated_data['parameters']:
        run_task.delay(param_name=param)

Где параметры это список int и это обеспечивается проверкой сериализатора.

@shared_task
def run_task(param_name: int) -> None:
    obj= Obj.objects.filter(param=param_name)
    ...

Под UT, когда я вызываю это run_task с CELERY_TASK_ALWAYS_EAGER=True все работает.В реальной среде эти задачи иногда выполняются просто нормально, а иногда - с ошибкой сервера:

    File "/usr/lib/python3.6/site-packages/rest_framework/decorators.py", line 53, in handler
    return func(*args, **kwargs)
  File "/opt/app/compliance/jobs/views.py", line 30, in create_task
    run_task.delay(param_name=param)
  File "/usr/lib/python3.6/site-packages/celery/app/task.py", line 408, in delay
    return self.apply_async(args, kwargs)
  File "/usr/lib/python3.6/site-packages/celery/app/task.py", line 535, in apply_async
    **options
  File "/usr/lib/python3.6/site-packages/celery/app/base.py", line 741, in send_task
    with self.producer_or_acquire(producer) as P:
  File "/usr/lib/python3.6/site-packages/celery/app/base.py", line 876, in producer_or_acquire
    producer, self.producer_pool.acquire, block=True,
  File "/usr/lib/python3.6/site-packages/celery/app/base.py", line 1246, in producer_pool
    return self.amqp.producer_pool
  File "/usr/lib/python3.6/site-packages/celery/app/amqp.py", line 612, in producer_pool
    self.app.connection_for_write()]
  File "/usr/lib/python3.6/site-packages/kombu/utils/collections.py", line 34, in __getitem__
    h = eqhash(key)
  File "/usr/lib/python3.6/site-packages/kombu/utils/collections.py", line 25, in eqhash
    return o.__eqhash__()
  File "/usr/lib/python3.6/site-packages/kombu/connection.py", line 629, in __eqhash__
    repr(self.transport_options))
  File "/usr/lib/python3.6/site-packages/kombu/utils/collections.py", line 16, in __init__
    self.hashvalue = hash(seq)
TypeError: unhashable type: 'set'

Я понимаю саму ошибку, но почему она возникает здесь, когда я передаю только один простой и анализируемый аргумент - не задан.Кто-нибудь знает, как заставить его работать постоянно?
Спасибо!

...