所以情况就是这样:我有两个Python程序,一个用于控制uEye相机模块,使用SimpleCV库,另一个用于对图像进行一些分析。它们分开的原因是SimpleCV是2.7,而我需要在分析阶段使用的几个模块仅用于3.X.
相机程序将连续捕捉图像并将图像保存到某个位置(重写旧图像),我每隔30毫秒就要调整一次。分析程序每100 ms左右接收一次图像。现在,我关心的问题是,如果分析程序试图在相机程序正好写入时读取图像,则会出现错误。
我相当肯定放置一个异常语句来捕获OSError并让它再试一次就足够了,但我觉得这有点强大。我还想过让相机程序写一个数字(比方说100)的图像,以说明两者碰巧同时在同一个文件上工作的几率,但这似乎不可靠。在一个完美的世界中,我可以放弃SimpleCV并使用3.X模块,只允许写入和读取按顺序发生,但我还没有找到适合相机的合适替代品。
有关避免此问题的最有效,最有效方法的想法吗?
这是(简化的)相机程序:
from SimpleCV import *
cam = Camera(0)
while True:
img = cam.getImage()
img.save("nav.jpg")
分析程序的重要部分:
from PIL import Image
img = Image.open("nav.jpg")
答案 0 :(得分:0)
最简单的方法是打开具有独占访问权限的文件,这样在使用它的过程中没有人可以打开它。有关实施细节,请参阅What is the best way to open a file for exclusive access in Python?。
请务必file.close()
或with <file_open> as f
尽快关闭文件,以尽量减少对“持续更新”代理的干扰。是的,并确保在这些代理中处理文件锁定案例。