python 进程间共享内存持久化

Kar*_*son 7 python shared-memory multiprocessing python-3.x

有没有办法让SharedMemoryPython创建的对象在进程之间持久存在?

如果在交互式 python 会话中调用以下代码:

>>> from multiprocessing import shared_memory
>>> shm = shared_memory.SharedMemory(name='test_smm', size=1000000, create=True)
Run Code Online (Sandbox Code Playgroud)

/dev/shm/它在 Linux 机器上创建一个文件。

ls /dev/shm/test_smm 
/dev/shm/test_smm
Run Code Online (Sandbox Code Playgroud)

但是当 python 会话结束时,我得到以下信息:

/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 
Run Code Online (Sandbox Code Playgroud)

并且test_smm消失了:

ls /dev/shm/test_smm 
ls: cannot access '/dev/shm/test_smm': No such file or directory
Run Code Online (Sandbox Code Playgroud)

那么有没有什么方法可以让Python中创建的共享内存对象在进程运行中持久存在呢?

使用Python 3.8运行

Die*_*lli 9

您可以从资源清理过程中取消注册共享内存对象,而无需取消链接:

$ 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
Run Code Online (Sandbox Code Playgroud)

我不知道这是否是可移植的,而且它看起来不像是使用多处理模块的受支持方式,但它至少可以在 Linux 上运行。