首页 > 解决方案 > 使函数线程安全

问题描述

我试图理解为什么某些函数在 python 中使用线程失败。例如,我正在尝试使用VideoCapture从网络摄像头中获取图像。这个例子工作正常:

from VideoCapture import Device

cam = Device()
cam.saveSnapshot('image.jpg')

但是当我把它放在一个线程上时,我得到了一个错误。

import threading
from VideoCapture import Device

def grab():
    cam = Device()
    cam.saveSnapshot('image.jpg')

thr = threading.Thread(target=grab)
thr.start()
thr.join()

文件“C:\Program Files\Python36\lib\site-packages\VideoCapture__init__.py”,第 60 行,在init self.dev = vidcap.new_Dev(devnum, showVideoWindow) vidcap.Error: 创建过滤器图失败。

根据这个参考,这个函数不是线程安全的。那么是否有任何解决方法可以绕过类似的问题?我尝试使用threading.lock但得到了同样的错误。如果我需要更改代码,我应该检查哪一部分?

标签: pythonmultithreading

解决方案


我找不到直接修复它的方法,但是在线程中导入模块修复了这个问题,我不确定这是否适用于其他模块。

import threading

def grab():
    from VideoCapture import Device
    cam = Device()
    cam.saveSnapshot('image.jpg')
    del cam
thr = threading.Thread(target=grab)
thr.start()
thr.join()

推荐阅读