python - 频繁出现 KeyErrors 的可能原因是什么?
问题描述
我在运行 Celery 时遇到 KeyErrors(使用 v4.1.0 - 潜在调用和 v4.4.7 - 悬崖),使用 RabbitMQ v3.6.6 作为传输,使用 memcached v1.4.33 作为后端。我们在 Debian 9 上运行 Python 2.7.13,因此,由于 Python 版本,Celery v4.4.7 已经达到了我们所能达到的最高水平。
有时,在我们开始看到 KeyErrors 之前,Celery 处理可以正常运行半小时左右。当它们开始时,它们是间歇性的,并且其他 Celery 任务成功完成。有时,当我们开始处理时,KeyErrors 就开始了。
这发生在让 memcached 条目在 24 小时后过期(默认值)和将过期时间设置为 60 秒(我们设置它以检查 memcached 内存使用情况,以防它使用太多内存并清除我们仍然需要的键) . 在任何情况下,即使是 60 秒的到期时间也无法解释丢失的密钥,因为我们的工作人员所需的处理总是在几秒钟内完成。
键始终是 GUID,例如 KeyError: '40e9373c-5921-48c7-a5e5-94bf0c767682' 或 KeyError: 'd89cc3a6-f7eea-41ec-bdc8-7023b3a5dbda'。
我们应该在哪里寻找这些错误的原因?这可能是 Celery 处理其密钥或存储的错误吗?
这是错误堆栈:
Traceback (most recent call last):
File "myApp/parser.py", line 216, in parse
resultSet = groupResultSet.get(timeout = timeoutInSeconds)
File "/root/.virtualenvs/scraping/lib/python2.7/site-packages/celery/result.py", line 635, in get
on_message=on_message,
File "/root/.virtualenvs/scraping/lib/python2.7/site-packages/celery/result.py", line 753, in join_native
acc[order_index[task_id]] = value
KeyError: '40e9373c-5921-48c7-a5e5-94bf0c767682'
这是我调用 Celery 的 get() 的代码:
logger.info("!!! About to form chunks")
groupResultSet = targetGroup.chunks([(target, targetData, numberOfNetworkErrors) for target in targets], 1).apply_async(queue=selectedQueue['name'])
logger.info("!!! Finished forming chunks")
timeoutInSeconds = 1800
logger.info("****** Before get() for {} ******".format(targetSubdomain))
resultSet = groupResultSet.get(timeout = timeoutInSeconds)
logger.info("****** Got resultSet for {} ******".format(targetSubdomain))
解决方案
推荐阅读
- .net-core - .NET Core 运行时补丁是否通过 Microsoft 更新自动应用?
- matplotlib - 最近更新后 Jupyter Notebook 导入不起作用
- r - 当单击图表中的某处时,带有表格的绘图单击事件将再次消失
- amazon-web-services - 使用 Prod 数据刷新测试数据
- java - 使用java代码访问文件共享,得到503服务不可用错误
- python - 模型输入:传递给模型的 Numpy 数组列表不是模型预期的大小。预计会看到 1 个数组,但得到了 142 个数组的列表
- python - 多个子进程如何在 python 中写入同一个共享内存数据帧?
- javascript - 如何在Vue中将重复的组件事件传递给父级
- javascript - 无法在函数中设置值
- excel - 查找重复项和重命名主/子