芹菜跳动任务停止失败后,几个节拍(opencv)



我有一个芹菜任务,它每60秒运行一次,抓取一个网络摄像头,从中获取一张静止照片,然后将其写入文件,以便服务器稍后可以在网页上提供它。通过python中的cv2库使用opencv。

它看起来像这样:

    @app.task                               # a task to get and save a webcam image
    def getWebCamImage()                    
    logger.debug("capturing image attempt")
    c = cv2.VideoCapture(0)                 #returns a videocapture object
    flag, frame = c.read()                  #grabs and decodes the next frame
    cv2.imwrite('file/loc/img.jpg, frame)   #writes the frame to a file
    logger.debug('saved image...hopefully') 
    c.release()                             #releases the videocapture object
    return 0

最初几分钟一切都很顺利,但随后它就会吐出正常的错误,比如无法获得网络摄像头属性,然后就停止了。而且再也不会发生了!

    ...DEBUG/BEAT] celerytest.getwebcamimage[process]:capturing image attempt
    VIDOC_QUERYMENU:Invalid argument
    VIDOC_QUERYMENU:Invalid argument
    VIDOC_QUERYMENU:Invalid argument

这正是它工作时的样子,只是它继续工作。知道什么能阻止它吗?我在raspperry pi上运行它,其中240Mb专用于arm核心,16 mb专用于图形。

我所做的事情来尝试修复它:

    $sudo sysctl vm.overvommit_memory=1

所以它不会抛出内存。配置错误$sudo rmmod ucvideo$sudo modprobe ucvideo nodrop=1 timeout=5000 quirks=0x80所以司机对摄像头更有耐心。我已经尝试了几个摄像头,所以这可能不是问题。

请帮助任何建议或测试你能想到的。这是一个棘手的问题,因为它在上,是/cellery叉。我要试着用guvcview运行一个脚本,但我觉得py/opencv选项更干净,因为它更容易安装,无论哪种方式,我想知道为什么这不起作用!

新闻:

DMESG显示一个芹菜进程因为内存不足而被杀死。有办法解决这个问题吗?在任务中创建的对象是如何销毁的?

这被证明与芹菜无关,而与cv有关。

如果每次CV2。释放了视频捕获对象,没有删除,所以内存仍然保留。在圆周率派上,内存很少,这很快就占用了所有的内存并被杀死了。我用linux中的top命令调查了内存使用情况。

这种情况发生在较大的计算机上,但在pi上症状更严重。

相关内容

  • 没有找到相关文章

最新更新