@@ -3749,12 +3749,19 @@ def _attach_existing_shmem_then_write(shmem_name_or_obj, binary_data):
3749
3749
local_sms .buf [:len (binary_data )] = binary_data
3750
3750
local_sms .close ()
3751
3751
3752
+ def _new_shm_name (self , prefix ):
3753
+ # Add a PID to the name of a POSIX shared memory object to allow
3754
+ # running multiprocessing tests (test_multiprocessing_fork,
3755
+ # test_multiprocessing_spawn, etc) in parallel.
3756
+ return prefix + str (os .getpid ())
3757
+
3752
3758
def test_shared_memory_basics (self ):
3753
- sms = shared_memory .SharedMemory ('test01_tsmb' , create = True , size = 512 )
3759
+ name_tsmb = self ._new_shm_name ('test01_tsmb' )
3760
+ sms = shared_memory .SharedMemory (name_tsmb , create = True , size = 512 )
3754
3761
self .addCleanup (sms .unlink )
3755
3762
3756
3763
# Verify attributes are readable.
3757
- self .assertEqual (sms .name , 'test01_tsmb' )
3764
+ self .assertEqual (sms .name , name_tsmb )
3758
3765
self .assertGreaterEqual (sms .size , 512 )
3759
3766
self .assertGreaterEqual (len (sms .buf ), sms .size )
3760
3767
@@ -3763,12 +3770,12 @@ def test_shared_memory_basics(self):
3763
3770
self .assertEqual (sms .buf [0 ], 42 )
3764
3771
3765
3772
# Attach to existing shared memory segment.
3766
- also_sms = shared_memory .SharedMemory ('test01_tsmb' )
3773
+ also_sms = shared_memory .SharedMemory (name_tsmb )
3767
3774
self .assertEqual (also_sms .buf [0 ], 42 )
3768
3775
also_sms .close ()
3769
3776
3770
3777
# Attach to existing shared memory segment but specify a new size.
3771
- same_sms = shared_memory .SharedMemory ('test01_tsmb' , size = 20 * sms .size )
3778
+ same_sms = shared_memory .SharedMemory (name_tsmb , size = 20 * sms .size )
3772
3779
self .assertLess (same_sms .size , 20 * sms .size ) # Size was ignored.
3773
3780
same_sms .close ()
3774
3781
@@ -3779,17 +3786,17 @@ def test_shared_memory_basics(self):
3779
3786
# manages unlinking on its own and unlink() does nothing).
3780
3787
# True release of shared memory segment does not necessarily
3781
3788
# happen until process exits, depending on the OS platform.
3789
+ name_dblunlink = self ._new_shm_name ('test01_dblunlink' )
3790
+ sms_uno = shared_memory .SharedMemory (
3791
+ name_dblunlink ,
3792
+ create = True ,
3793
+ size = 5000
3794
+ )
3782
3795
with self .assertRaises (FileNotFoundError ):
3783
- sms_uno = shared_memory .SharedMemory (
3784
- 'test01_dblunlink' ,
3785
- create = True ,
3786
- size = 5000
3787
- )
3788
-
3789
3796
try :
3790
3797
self .assertGreaterEqual (sms_uno .size , 5000 )
3791
3798
3792
- sms_duo = shared_memory .SharedMemory ('test01_dblunlink' )
3799
+ sms_duo = shared_memory .SharedMemory (name_dblunlink )
3793
3800
sms_duo .unlink () # First shm_unlink() call.
3794
3801
sms_duo .close ()
3795
3802
sms_uno .close ()
@@ -3801,7 +3808,7 @@ def test_shared_memory_basics(self):
3801
3808
# Attempting to create a new shared memory segment with a
3802
3809
# name that is already in use triggers an exception.
3803
3810
there_can_only_be_one_sms = shared_memory .SharedMemory (
3804
- 'test01_tsmb' ,
3811
+ name_tsmb ,
3805
3812
create = True ,
3806
3813
size = 512
3807
3814
)
@@ -3815,7 +3822,7 @@ def test_shared_memory_basics(self):
3815
3822
# case of MacOS/darwin, requesting a smaller size is disallowed.
3816
3823
class OptionalAttachSharedMemory (shared_memory .SharedMemory ):
3817
3824
_flags = os .O_CREAT | os .O_RDWR
3818
- ok_if_exists_sms = OptionalAttachSharedMemory ('test01_tsmb' )
3825
+ ok_if_exists_sms = OptionalAttachSharedMemory (name_tsmb )
3819
3826
self .assertEqual (ok_if_exists_sms .size , sms .size )
3820
3827
ok_if_exists_sms .close ()
3821
3828
@@ -4003,10 +4010,11 @@ def test_shared_memory_ShareableList_basics(self):
4003
4010
self .assertEqual (sl .count (b'adios' ), 0 )
4004
4011
4005
4012
# Exercise creating a duplicate.
4006
- sl_copy = shared_memory .ShareableList (sl , name = 'test03_duplicate' )
4013
+ name_duplicate = self ._new_shm_name ('test03_duplicate' )
4014
+ sl_copy = shared_memory .ShareableList (sl , name = name_duplicate )
4007
4015
try :
4008
4016
self .assertNotEqual (sl .shm .name , sl_copy .shm .name )
4009
- self .assertEqual ('test03_duplicate' , sl_copy .shm .name )
4017
+ self .assertEqual (name_duplicate , sl_copy .shm .name )
4010
4018
self .assertEqual (list (sl ), list (sl_copy ))
4011
4019
self .assertEqual (sl .format , sl_copy .format )
4012
4020
sl_copy [- 1 ] = 77
0 commit comments