gpt4 book ai didi

python - Python中命名的内存映射文件?

转载 作者:行者123 更新时间:2023-12-04 14:43:35 32 4
gpt4 key购买 nike

我正在使用 OpenCV在 Web 服务中处理一些视频数据。在调用 OpenCV 之前,视频已经加载到 bytearray 缓冲区,我想将其传递给 VideoCapture 对象:

# The following raises cv2.error because it can't convert '_io.BytesIO' to 'str' for 'filename'
cap = cv2.VideoCapture(buffer)

不幸的是,VideoCapture() 需要一个字符串文件名,而不是缓冲区。现在,我将 bytearray 保存到一个临时文件,并将其名称传递给 VideoCapture()

问题:

  • 有没有办法在 Python 中创建 named 内存文件,这样我就可以安抚 OpenCV?
  • 或者,是否有另一个支持缓冲区的 OpenCV API?

最佳答案

注意:POSIX 特定的!由于您没有提供 OS 标签,我认为没关系。

根据this answer (和 this shm_overview manpage )系统上始终存在 /dev/shm 。这是一个 tmpfs 映射到 shared(不是 Python 进程内存)内存池中,如建议 here ,但好处是您不需要创建它,所以没有有趣的发明:

  • os.system("mount ...")
  • Popen(["mount", ...]) 包装器。

只需使用 tempfile.NamedTemporaryFile()像这样:

from tempfile import NamedTemporaryFile
with NamedTemporaryFile(dir="/dev/shm") as file:
print(file.name)
# /dev/shm/tmp2m86e0e0

然后您可以将其输入 OpenCV 的 API 包装器。或者,使用 pyfilesystem作为该设备/FS 的更广泛的包装器。

另外,multiprocessing.heap.Arena也使用它,所以如果它不起作用,就会出现更多的麻烦。对于 Windows check this implementation它使用 winapi.

对于/dev/shm的大小:

根据 sudo ipcs 判断如果您不使用套接字、管道或磁盘,这很可能是您希望在进程之间共享内容时使用的方式。

由于它是 POSIX,它应该可以在兼容 POSIX 的系统上运行,因此也可以在 MacOS( no ) 或 Solaris 上运行,但我无法尝试。

关于python - Python中命名的内存映射文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69328090/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com