【发布时间】:2017-11-22 06:29:40
【问题描述】:
我在 macOS 机器支持的 Docker 容器中运行服务器,我需要从中发送多个图像以供 Google Cloud Vision API 处理。
我必须能够最大限度地减少上传和处理图像所花费的时间。
我首先将 GCV 调用包装在 Queue.Queue 和 Threading.Thread 中,但这偶尔会导致我的代码崩溃(不是被 python Exception 困住)因此:
E1121 14:15:10.902211037 25448 sync_posix.c:38] assertion failed: pthread_mutex_destroy(mu) == 0
根据几个 github 线程,这是一个受 gRPC 启发(或 httplib?)的错误/功能,但我找不到简单解决方法的步骤 - 参见例如https://github.com/grpc/grpc/issues/11184 和 https://github.com/grpc/grpc/issues/10909
鉴于这似乎是一个普遍遇到的问题,没有明确的解决方案,缓解它的最佳方法是什么?
是否像使用单个 Batch 调用(但整体速度呢?)到 GCV 一样简单?没有其他方法可以安全地线程调用吗?
更新:
由于担心损坏,我开始将 gRPC 回滚到 v1.2.x 一个 la
https://github.com/grpc/grpc/issues/10909#issuecomment-302581954
除了我必须在我的 Docker 容器中将/usr/local/lib 添加到LD_LIBRARY_PATH 才能获取libprotobuf.so.12。
我没有对任何其他 python 包进行任何更改。
然后我做了:
pip install grpcio==1.2.1
显然这会变得昂贵,但与之前的 1/3 调用相比,崩溃率是
现在:我如何才能确定地测试此问题是否已修复?
【问题讨论】:
标签: python multithreading google-cloud-vision