@@ -3773,12 +3773,19 @@ def _attach_existing_shmem_then_write(shmem_name_or_obj, binary_data):
37733773 local_sms .buf [:len (binary_data )] = binary_data
37743774 local_sms .close ()
37753775
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+
37763782 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 )
37783785 self .addCleanup (sms .unlink )
37793786
37803787 # Verify attributes are readable.
3781- self .assertEqual (sms .name , 'test01_tsmb' )
3788+ self .assertEqual (sms .name , name_tsmb )
37823789 self .assertGreaterEqual (sms .size , 512 )
37833790 self .assertGreaterEqual (len (sms .buf ), sms .size )
37843791
@@ -3798,12 +3805,12 @@ def test_shared_memory_basics(self):
37983805 self .assertEqual (sms .buf [0 ], 42 )
37993806
38003807 # Attach to existing shared memory segment.
3801- also_sms = shared_memory .SharedMemory ('test01_tsmb' )
3808+ also_sms = shared_memory .SharedMemory (name_tsmb )
38023809 self .assertEqual (also_sms .buf [0 ], 42 )
38033810 also_sms .close ()
38043811
38053812 # 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 )
38073814 self .assertLess (same_sms .size , 20 * sms .size ) # Size was ignored.
38083815 same_sms .close ()
38093816
@@ -3821,7 +3828,7 @@ def test_shared_memory_basics(self):
38213828 'multiprocessing.shared_memory._make_filename' ) as mock_make_filename :
38223829
38233830 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' ) ]
38253832 # Prepend NAME_PREFIX which can be '/psm_' or 'wnsm_', necessary
38263833 # because some POSIX compliant systems require name to start with /
38273834 names = [NAME_PREFIX + name for name in names ]
@@ -3843,17 +3850,17 @@ def test_shared_memory_basics(self):
38433850 # manages unlinking on its own and unlink() does nothing).
38443851 # True release of shared memory segment does not necessarily
38453852 # 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+ )
38463859 with self .assertRaises (FileNotFoundError ):
3847- sms_uno = shared_memory .SharedMemory (
3848- 'test01_dblunlink' ,
3849- create = True ,
3850- size = 5000
3851- )
3852-
38533860 try :
38543861 self .assertGreaterEqual (sms_uno .size , 5000 )
38553862
3856- sms_duo = shared_memory .SharedMemory ('test01_dblunlink' )
3863+ sms_duo = shared_memory .SharedMemory (name_dblunlink )
38573864 sms_duo .unlink () # First shm_unlink() call.
38583865 sms_duo .close ()
38593866 sms_uno .close ()
@@ -3865,7 +3872,7 @@ def test_shared_memory_basics(self):
38653872 # Attempting to create a new shared memory segment with a
38663873 # name that is already in use triggers an exception.
38673874 there_can_only_be_one_sms = shared_memory .SharedMemory (
3868- 'test01_tsmb' ,
3875+ name_tsmb ,
38693876 create = True ,
38703877 size = 512
38713878 )
@@ -3879,7 +3886,7 @@ def test_shared_memory_basics(self):
38793886 # case of MacOS/darwin, requesting a smaller size is disallowed.
38803887 class OptionalAttachSharedMemory (shared_memory .SharedMemory ):
38813888 _flags = os .O_CREAT | os .O_RDWR
3882- ok_if_exists_sms = OptionalAttachSharedMemory ('test01_tsmb' )
3889+ ok_if_exists_sms = OptionalAttachSharedMemory (name_tsmb )
38833890 self .assertEqual (ok_if_exists_sms .size , sms .size )
38843891 ok_if_exists_sms .close ()
38853892
@@ -4084,10 +4091,11 @@ def test_shared_memory_ShareableList_basics(self):
40844091 self .assertEqual (sl .count (b'adios' ), 0 )
40854092
40864093 # 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 )
40884096 try :
40894097 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 )
40914099 self .assertEqual (list (sl ), list (sl_copy ))
40924100 self .assertEqual (sl .format , sl_copy .format )
40934101 sl_copy [- 1 ] = 77
0 commit comments