我有一组Web API,我在Apache上使用WSGI进行图像处理。 最近我将OpenCV升级到3.2(我使用Python 2.7) 当我从控制台运行它时,OpenCV似乎运行正常,但是当我进行Web API调用时,openCV会在将图像转换为灰度时挂起:
cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
它完全随意,无法找到模式。有时它会挂起,有时它适用于同一图像。 有什么想法吗?
更多信息: 当我从shell命令执行它时,一切正常:
>>> sudo python manage.py shell
>>> import cv2
>>> import numpy as np
>>> from PIL import Image
>>> image = Image.open(img_path)
>>> image = np.asarray(image)
>>> print image
array([[[255, 255, 255],
[255, 255, 255],
[255, 255, 255],...]]], dtype=uint8)
>>> img = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
>>> print img
array([[255, 255, 255, ..., 255, 255, 255],
[255, 255, 255, ..., 255, 255, 255],
[255, 255, 255, ..., 255, 255, 255],
...,
[255, 255, 255, ..., 255, 255, 255],
[255, 255, 255, ..., 255, 255, 255],
[255, 255, 255, ..., 255, 255, 255]], dtype=uint8)
更新: 问题出在WSGI上。当我在WSGIDaemonProcess的apache配置中指定多个进程时,我可以轻松地重现挂起。将其设置为1后,它可以正常工作
WSGIDaemonProcess processes=1 threads=25 maximum-requests=100
我还不确定为什么wsgi中的多个进程会导致麻烦
答案 0 :(得分:1)
我遇到了类似的问题并找到了解决方法 - >只需添加到您的apache配置:
WSGIApplicationGroup %{GLOBAL}
显然,如果您的扩展模块不是设计用于子解释器,则会发生这种情况。以上迫使它在主翻译中运行。
来源: