python进程间的SharedMemory持久化
python SharedMemory persistence between processes
有什么方法可以使在 Python 中创建的 SharedMemory
对象在进程之间保持不变?
如果在交互式 python 会话中调用以下代码:
>>> from multiprocessing import shared_memory
>>> shm = shared_memory.SharedMemory(name='test_smm', size=1000000, create=True)
它在 Linux 机器上的 /dev/shm/
中创建了一个文件。
ls /dev/shm/test_smm
/dev/shm/test_smm
但是当 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
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
对象在进程之间保持不变?
如果在交互式 python 会话中调用以下代码:
>>> from multiprocessing import shared_memory
>>> shm = shared_memory.SharedMemory(name='test_smm', size=1000000, create=True)
它在 Linux 机器上的 /dev/shm/
中创建了一个文件。
ls /dev/shm/test_smm
/dev/shm/test_smm
但是当 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
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。