@@ -3771,12 +3771,19 @@ def _attach_existing_shmem_then_write(shmem_name_or_obj, binary_data):
37713771 local_sms .buf [:len (binary_data )] = binary_data
37723772 local_sms .close ()
37733773
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+
37743780 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 )
37763783 self .addCleanup (sms .unlink )
37773784
37783785 # Verify attributes are readable.
3779- self .assertEqual (sms .name , 'test01_tsmb' )
3786+ self .assertEqual (sms .name , name_tsmb )
37803787 self .assertGreaterEqual (sms .size , 512 )
37813788 self .assertGreaterEqual (len (sms .buf ), sms .size )
37823789
@@ -3796,12 +3803,12 @@ def test_shared_memory_basics(self):
37963803 self .assertEqual (sms .buf [0 ], 42 )
37973804
37983805 # Attach to existing shared memory segment.
3799- also_sms = shared_memory .SharedMemory ('test01_tsmb' )
3806+ also_sms = shared_memory .SharedMemory (name_tsmb )
38003807 self .assertEqual (also_sms .buf [0 ], 42 )
38013808 also_sms .close ()
38023809
38033810 # 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 )
38053812 self .assertLess (same_sms .size , 20 * sms .size ) # Size was ignored.
38063813 same_sms .close ()
38073814
@@ -3819,7 +3826,7 @@ def test_shared_memory_basics(self):
38193826 'multiprocessing.shared_memory._make_filename' ) as mock_make_filename :
38203827
38213828 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' ) ]
38233830 # Prepend NAME_PREFIX which can be '/psm_' or 'wnsm_', necessary
38243831 # because some POSIX compliant systems require name to start with /
38253832 names = [NAME_PREFIX + name for name in names ]
@@ -3841,17 +3848,17 @@ def test_shared_memory_basics(self):
38413848 # manages unlinking on its own and unlink() does nothing).
38423849 # True release of shared memory segment does not necessarily
38433850 # 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+ )
38443857 with self .assertRaises (FileNotFoundError ):
3845- sms_uno = shared_memory .SharedMemory (
3846- 'test01_dblunlink' ,
3847- create = True ,
3848- size = 5000
3849- )
3850-
38513858 try :
38523859 self .assertGreaterEqual (sms_uno .size , 5000 )
38533860
3854- sms_duo = shared_memory .SharedMemory ('test01_dblunlink' )
3861+ sms_duo = shared_memory .SharedMemory (name_dblunlink )
38553862 sms_duo .unlink () # First shm_unlink() call.
38563863 sms_duo .close ()
38573864 sms_uno .close ()
@@ -3863,7 +3870,7 @@ def test_shared_memory_basics(self):
38633870 # Attempting to create a new shared memory segment with a
38643871 # name that is already in use triggers an exception.
38653872 there_can_only_be_one_sms = shared_memory .SharedMemory (
3866- 'test01_tsmb' ,
3873+ name_tsmb ,
38673874 create = True ,
38683875 size = 512
38693876 )
@@ -3877,7 +3884,7 @@ def test_shared_memory_basics(self):
38773884 # case of MacOS/darwin, requesting a smaller size is disallowed.
38783885 class OptionalAttachSharedMemory (shared_memory .SharedMemory ):
38793886 _flags = os .O_CREAT | os .O_RDWR
3880- ok_if_exists_sms = OptionalAttachSharedMemory ('test01_tsmb' )
3887+ ok_if_exists_sms = OptionalAttachSharedMemory (name_tsmb )
38813888 self .assertEqual (ok_if_exists_sms .size , sms .size )
38823889 ok_if_exists_sms .close ()
38833890
@@ -4082,10 +4089,11 @@ def test_shared_memory_ShareableList_basics(self):
40824089 self .assertEqual (sl .count (b'adios' ), 0 )
40834090
40844091 # 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 )
40864094 try :
40874095 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 )
40894097 self .assertEqual (list (sl ), list (sl_copy ))
40904098 self .assertEqual (sl .format , sl_copy .format )
40914099 sl_copy [- 1 ] = 77
0 commit comments