@@ -3769,13 +3769,20 @@ def _attach_existing_shmem_then_write(shmem_name_or_obj, binary_data):
37693769 local_sms .buf [:len (binary_data )] = binary_data
37703770 local_sms .close ()
37713771
3772+ def _new_shm_name (self , prefix ):
3773+ # Add a PID to the name of a POSIX shared memory object to allow
3774+ # running multiprocessing tests (test_multiprocessing_fork,
3775+ # test_multiprocessing_spawn, etc) in parallel.
3776+ return prefix + str (os .getpid ())
3777+
37723778 @unittest .skipIf (sys .platform == "win32" , "test is broken on Windows" )
37733779 def test_shared_memory_basics (self ):
3774- sms = shared_memory .SharedMemory ('test01_tsmb' , create = True , size = 512 )
3780+ name_tsmb = self ._new_shm_name ('test01_tsmb' )
3781+ sms = shared_memory .SharedMemory (name_tsmb , create = True , size = 512 )
37753782 self .addCleanup (sms .unlink )
37763783
37773784 # Verify attributes are readable.
3778- self .assertEqual (sms .name , 'test01_tsmb' )
3785+ self .assertEqual (sms .name , name_tsmb )
37793786 self .assertGreaterEqual (sms .size , 512 )
37803787 self .assertGreaterEqual (len (sms .buf ), sms .size )
37813788
@@ -3784,12 +3791,12 @@ def test_shared_memory_basics(self):
37843791 self .assertEqual (sms .buf [0 ], 42 )
37853792
37863793 # Attach to existing shared memory segment.
3787- also_sms = shared_memory .SharedMemory ('test01_tsmb' )
3794+ also_sms = shared_memory .SharedMemory (name_tsmb )
37883795 self .assertEqual (also_sms .buf [0 ], 42 )
37893796 also_sms .close ()
37903797
37913798 # Attach to existing shared memory segment but specify a new size.
3792- same_sms = shared_memory .SharedMemory ('test01_tsmb' , size = 20 * sms .size )
3799+ same_sms = shared_memory .SharedMemory (name_tsmb , size = 20 * sms .size )
37933800 self .assertLess (same_sms .size , 20 * sms .size ) # Size was ignored.
37943801 same_sms .close ()
37953802
@@ -3807,7 +3814,7 @@ def test_shared_memory_basics(self):
38073814 'multiprocessing.shared_memory._make_filename' ) as mock_make_filename :
38083815
38093816 NAME_PREFIX = shared_memory ._SHM_NAME_PREFIX
3810- names = ['test01_fn' , 'test02_fn' ]
3817+ names = [self . _new_shm_name ( 'test01_fn' ), self . _new_shm_name ( 'test02_fn' ) ]
38113818 # Prepend NAME_PREFIX which can be '/psm_' or 'wnsm_', necessary
38123819 # because some POSIX compliant systems require name to start with /
38133820 names = [NAME_PREFIX + name for name in names ]
@@ -3829,17 +3836,17 @@ def test_shared_memory_basics(self):
38293836 # manages unlinking on its own and unlink() does nothing).
38303837 # True release of shared memory segment does not necessarily
38313838 # happen until process exits, depending on the OS platform.
3839+ name_dblunlink = self ._new_shm_name ('test01_dblunlink' )
3840+ sms_uno = shared_memory .SharedMemory (
3841+ name_dblunlink ,
3842+ create = True ,
3843+ size = 5000
3844+ )
38323845 with self .assertRaises (FileNotFoundError ):
3833- sms_uno = shared_memory .SharedMemory (
3834- 'test01_dblunlink' ,
3835- create = True ,
3836- size = 5000
3837- )
3838-
38393846 try :
38403847 self .assertGreaterEqual (sms_uno .size , 5000 )
38413848
3842- sms_duo = shared_memory .SharedMemory ('test01_dblunlink' )
3849+ sms_duo = shared_memory .SharedMemory (name_dblunlink )
38433850 sms_duo .unlink () # First shm_unlink() call.
38443851 sms_duo .close ()
38453852 sms_uno .close ()
@@ -3851,7 +3858,7 @@ def test_shared_memory_basics(self):
38513858 # Attempting to create a new shared memory segment with a
38523859 # name that is already in use triggers an exception.
38533860 there_can_only_be_one_sms = shared_memory .SharedMemory (
3854- 'test01_tsmb' ,
3861+ name_tsmb ,
38553862 create = True ,
38563863 size = 512
38573864 )
@@ -3865,7 +3872,7 @@ def test_shared_memory_basics(self):
38653872 # case of MacOS/darwin, requesting a smaller size is disallowed.
38663873 class OptionalAttachSharedMemory (shared_memory .SharedMemory ):
38673874 _flags = os .O_CREAT | os .O_RDWR
3868- ok_if_exists_sms = OptionalAttachSharedMemory ('test01_tsmb' )
3875+ ok_if_exists_sms = OptionalAttachSharedMemory (name_tsmb )
38693876 self .assertEqual (ok_if_exists_sms .size , sms .size )
38703877 ok_if_exists_sms .close ()
38713878
@@ -4053,10 +4060,11 @@ def test_shared_memory_ShareableList_basics(self):
40534060 self .assertEqual (sl .count (b'adios' ), 0 )
40544061
40554062 # Exercise creating a duplicate.
4056- sl_copy = shared_memory .ShareableList (sl , name = 'test03_duplicate' )
4063+ name_duplicate = self ._new_shm_name ('test03_duplicate' )
4064+ sl_copy = shared_memory .ShareableList (sl , name = name_duplicate )
40574065 try :
40584066 self .assertNotEqual (sl .shm .name , sl_copy .shm .name )
4059- self .assertEqual ('test03_duplicate' , sl_copy .shm .name )
4067+ self .assertEqual (name_duplicate , sl_copy .shm .name )
40604068 self .assertEqual (list (sl ), list (sl_copy ))
40614069 self .assertEqual (sl .format , sl_copy .format )
40624070 sl_copy [- 1 ] = 77
0 commit comments