进程之间的python SharedMemory持久性

标签 python python-3.x multiprocessing shared-memory

有什么办法可以制作SharedMemory在 Python 中创建的对象在进程之间持续存在吗?
如果在交互式 python session 中调用以下代码:

>>> from multiprocessing import shared_memory
>>> shm = shared_memory.SharedMemory(name='test_smm', size=1000000, create=True)
它在 /dev/shm/ 中创建了一个文件在 Linux 机器上。
ls /dev/shm/test_smm 
/dev/shm/test_smm
但是当 python session 结束时,我得到以下信息:
/usr/lib/python3.8/multiprocessing/resource_tracker.py:216: UserWarning: resource_tracker: There appear to be 1 leaked shared_memory objects to clean up at shutdown
  warnings.warn('resource_tracker: There appear to be %d 
test_smm离开了:
ls /dev/shm/test_smm 
ls: cannot access '/dev/shm/test_smm': No such file or directory
那么有什么办法可以让python中创建的共享内存对象跨进程运行持久化呢?
使用 Python 3.8 运行

最佳答案

您可以在不取消链接的情况下从资源清理过程中取消注册共享内存对象:

$ python3
Python 3.8.6 (default, Sep 25 2020, 09:36:53) 
[GCC 10.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from multiprocessing import shared_memory, resource_tracker
>>> shm = shared_memory.SharedMemory(name='test_smm', size=1000000, create=True)
>>> resource_tracker.unregister(shm._name, 'shared_memory')
>>> 
$ ls /dev/shm/test_smm 
/dev/shm/test_smm
我不知道这是否是可移植的,它看起来不像是使用多处理模块的受支持方式,但它至少适用于 Linux。

关于进程之间的python SharedMemory持久性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64915548/

相关文章:

python - 使用 gevent 池时出现 `NewConnectionError`

python - 在seaborn中绘制两列dataFrame

python - 每次我在 python 中调用函数时,有没有办法进行一些预处理/后处理

python - 查找整数的线性组合

java - 单例 Bean 如何服务并发请求?

python - 列表字典中的总和值

python - xpath 前子问题

字符串检查 Python

Python多处理: How to shutdown a long running process that is a sequence of actions

python - 多处理在 Ubuntu 中有效,在 Windows 中无效