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