python - Celery shared_task 参数解析错误
问题描述
我在 Django 中使用 celery 4.2.0 在 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)
...
run_task
当我在一切正常的情况下调用它时,在 UTs 下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'
我理解错误本身,但是当我只传递一个简单且可解析的参数时它怎么会出现在这里 - 未设置。有谁知道如何让它持续工作?
谢谢!
解决方案
推荐阅读
- c# - 如何使用 ajax 传递 from.serialize() 和数组值?
- javascript - 如何使用 VUE 2 Composition API 正确设置 npm 包?
- django - 保存 submit.created_utc 值并保存在 django models.DateTimeField
- elasticsearch - 查询以在弹性搜索中提升和排序数据
- node.js - 如何检查 url 路径/路径名是否存在(Node.js URL)
- java - 设置回原始语言环境不起作用
- angular - Angular 8 graphql.module localstorage.getItem 不可用
- recursion - 从 Julia AST 中剥离行号
- docker - docker 无事可做,找不到 docker commnad
- javascript - 单击时,事件监听器正在成倍增加