11from multiprocessing import shared_memory
22from filelock import FileLock
33from lightllm .utils .log_utils import init_logger
4+ from lightllm .utils .auto_shm_cleanup import register_posix_shm_for_cleanup
45
56logger = init_logger (__name__ )
67
78
8- def create_or_link_shm (name , expected_size , force_mode = None ):
9+ def create_or_link_shm (name , expected_size , force_mode = None , auto_cleanup = False ):
910 """
1011 Args:
1112 name: name of the shared memory
@@ -26,15 +27,15 @@ def create_or_link_shm(name, expected_size, force_mode=None):
2627
2728 if force_mode == "create" :
2829 with FileLock (lock_name ):
29- return _force_create_shm (name , expected_size )
30+ return _force_create_shm (name , expected_size , auto_cleanup )
3031 elif force_mode == "link" :
3132 return _force_link_shm (name , expected_size )
3233 else :
3334 with FileLock (lock_name ):
34- return _smart_create_or_link_shm (name , expected_size )
35+ return _smart_create_or_link_shm (name , expected_size , auto_cleanup )
3536
3637
37- def _force_create_shm (name , expected_size ):
38+ def _force_create_shm (name , expected_size , auto_cleanup ):
3839 """强制创建新的共享内存"""
3940 try :
4041 existing_shm = shared_memory .SharedMemory (name = name )
@@ -45,6 +46,8 @@ def _force_create_shm(name, expected_size):
4546
4647 # 创建新的共享内存
4748 shm = shared_memory .SharedMemory (name = name , create = True , size = expected_size )
49+ if auto_cleanup :
50+ register_posix_shm_for_cleanup (name )
4851 return shm
4952
5053
@@ -62,12 +65,12 @@ def _force_link_shm(name, expected_size):
6265 raise e
6366
6467
65- def _smart_create_or_link_shm (name , expected_size ):
68+ def _smart_create_or_link_shm (name , expected_size , auto_cleanup ):
6669 """优先连接,不存在则创建"""
6770 try :
6871 shm = _force_link_shm (name = name , expected_size = expected_size )
6972 return shm
7073 except :
7174 pass
7275
73- return _force_create_shm (name = name , expected_size = expected_size )
76+ return _force_create_shm (name = name , expected_size = expected_size , auto_cleanup = auto_cleanup )
0 commit comments