@@ -3771,12 +3771,19 @@ def _attach_existing_shmem_then_write(shmem_name_or_obj, binary_data):
3771
3771
local_sms .buf [:len (binary_data )] = binary_data
3772
3772
local_sms .close ()
3773
3773
3774
+ def _new_shm_name (self , prefix ):
3775
+ # Add a PID to the name of a POSIX shared memory object to allow
3776
+ # running multiprocessing tests (test_multiprocessing_fork,
3777
+ # test_multiprocessing_spawn, etc) in parallel.
3778
+ return prefix + str (os .getpid ())
3779
+
3774
3780
def test_shared_memory_basics (self ):
3775
- sms = shared_memory .SharedMemory ('test01_tsmb' , create = True , size = 512 )
3781
+ name_tsmb = self ._new_shm_name ('test01_tsmb' )
3782
+ sms = shared_memory .SharedMemory (name_tsmb , create = True , size = 512 )
3776
3783
self .addCleanup (sms .unlink )
3777
3784
3778
3785
# Verify attributes are readable.
3779
- self .assertEqual (sms .name , 'test01_tsmb' )
3786
+ self .assertEqual (sms .name , name_tsmb )
3780
3787
self .assertGreaterEqual (sms .size , 512 )
3781
3788
self .assertGreaterEqual (len (sms .buf ), sms .size )
3782
3789
@@ -3796,12 +3803,12 @@ def test_shared_memory_basics(self):
3796
3803
self .assertEqual (sms .buf [0 ], 42 )
3797
3804
3798
3805
# Attach to existing shared memory segment.
3799
- also_sms = shared_memory .SharedMemory ('test01_tsmb' )
3806
+ also_sms = shared_memory .SharedMemory (name_tsmb )
3800
3807
self .assertEqual (also_sms .buf [0 ], 42 )
3801
3808
also_sms .close ()
3802
3809
3803
3810
# Attach to existing shared memory segment but specify a new size.
3804
- same_sms = shared_memory .SharedMemory ('test01_tsmb' , size = 20 * sms .size )
3811
+ same_sms = shared_memory .SharedMemory (name_tsmb , size = 20 * sms .size )
3805
3812
self .assertLess (same_sms .size , 20 * sms .size ) # Size was ignored.
3806
3813
same_sms .close ()
3807
3814
@@ -3819,7 +3826,7 @@ def test_shared_memory_basics(self):
3819
3826
'multiprocessing.shared_memory._make_filename' ) as mock_make_filename :
3820
3827
3821
3828
NAME_PREFIX = shared_memory ._SHM_NAME_PREFIX
3822
- names = ['test01_fn' , 'test02_fn' ]
3829
+ names = [self . _new_shm_name ( 'test01_fn' ), self . _new_shm_name ( 'test02_fn' ) ]
3823
3830
# Prepend NAME_PREFIX which can be '/psm_' or 'wnsm_', necessary
3824
3831
# because some POSIX compliant systems require name to start with /
3825
3832
names = [NAME_PREFIX + name for name in names ]
@@ -3841,17 +3848,17 @@ def test_shared_memory_basics(self):
3841
3848
# manages unlinking on its own and unlink() does nothing).
3842
3849
# True release of shared memory segment does not necessarily
3843
3850
# happen until process exits, depending on the OS platform.
3851
+ name_dblunlink = self ._new_shm_name ('test01_dblunlink' )
3852
+ sms_uno = shared_memory .SharedMemory (
3853
+ name_dblunlink ,
3854
+ create = True ,
3855
+ size = 5000
3856
+ )
3844
3857
with self .assertRaises (FileNotFoundError ):
3845
- sms_uno = shared_memory .SharedMemory (
3846
- 'test01_dblunlink' ,
3847
- create = True ,
3848
- size = 5000
3849
- )
3850
-
3851
3858
try :
3852
3859
self .assertGreaterEqual (sms_uno .size , 5000 )
3853
3860
3854
- sms_duo = shared_memory .SharedMemory ('test01_dblunlink' )
3861
+ sms_duo = shared_memory .SharedMemory (name_dblunlink )
3855
3862
sms_duo .unlink () # First shm_unlink() call.
3856
3863
sms_duo .close ()
3857
3864
sms_uno .close ()
@@ -3863,7 +3870,7 @@ def test_shared_memory_basics(self):
3863
3870
# Attempting to create a new shared memory segment with a
3864
3871
# name that is already in use triggers an exception.
3865
3872
there_can_only_be_one_sms = shared_memory .SharedMemory (
3866
- 'test01_tsmb' ,
3873
+ name_tsmb ,
3867
3874
create = True ,
3868
3875
size = 512
3869
3876
)
@@ -3877,7 +3884,7 @@ def test_shared_memory_basics(self):
3877
3884
# case of MacOS/darwin, requesting a smaller size is disallowed.
3878
3885
class OptionalAttachSharedMemory (shared_memory .SharedMemory ):
3879
3886
_flags = os .O_CREAT | os .O_RDWR
3880
- ok_if_exists_sms = OptionalAttachSharedMemory ('test01_tsmb' )
3887
+ ok_if_exists_sms = OptionalAttachSharedMemory (name_tsmb )
3881
3888
self .assertEqual (ok_if_exists_sms .size , sms .size )
3882
3889
ok_if_exists_sms .close ()
3883
3890
@@ -4082,10 +4089,11 @@ def test_shared_memory_ShareableList_basics(self):
4082
4089
self .assertEqual (sl .count (b'adios' ), 0 )
4083
4090
4084
4091
# Exercise creating a duplicate.
4085
- sl_copy = shared_memory .ShareableList (sl , name = 'test03_duplicate' )
4092
+ name_duplicate = self ._new_shm_name ('test03_duplicate' )
4093
+ sl_copy = shared_memory .ShareableList (sl , name = name_duplicate )
4086
4094
try :
4087
4095
self .assertNotEqual (sl .shm .name , sl_copy .shm .name )
4088
- self .assertEqual ('test03_duplicate' , sl_copy .shm .name )
4096
+ self .assertEqual (name_duplicate , sl_copy .shm .name )
4089
4097
self .assertEqual (list (sl ), list (sl_copy ))
4090
4098
self .assertEqual (sl .format , sl_copy .format )
4091
4099
sl_copy [- 1 ] = 77
0 commit comments