MCPcopy Index your code
hub / github.com/python/cpython / check_forkserver_death

Method check_forkserver_death

Lib/test/_test_multiprocessing.py:960–996  ·  view source on GitHub ↗
(self, signum)

Source from the content-addressed store, hash-verified

958 evt.set()
959
960 def check_forkserver_death(self, signum):
961 # bpo-31308: if the forkserver process has died, we should still
962 # be able to create and run new Process instances (the forkserver
963 # is implicitly restarted).
964 if self.TYPE == 'threads':
965 self.skipTest('test not appropriate for {}'.format(self.TYPE))
966 sm = multiprocessing.get_start_method()
967 if sm != 'forkserver':
968 # The fork method by design inherits all fds from the parent,
969 # trying to go against it is a lost battle
970 self.skipTest('test not appropriate for {}'.format(sm))
971
972 from multiprocessing.forkserver import _forkserver
973 _forkserver.ensure_running()
974
975 # First process sleeps 500 ms
976 delay = 0.5
977
978 evt = self.Event()
979 proc = self.Process(target=self._sleep_and_set_event, args=(evt, delay))
980 proc.start()
981
982 pid = _forkserver._forkserver_pid
983 os.kill(pid, signum)
984 # give time to the fork server to die and time to proc to complete
985 time.sleep(delay * 2.0)
986
987 evt2 = self.Event()
988 proc2 = self.Process(target=self._sleep_and_set_event, args=(evt2,))
989 proc2.start()
990 proc2.join()
991 self.assertTrue(evt2.is_set())
992 self.assertEqual(proc2.exitcode, 0)
993
994 proc.join()
995 self.assertTrue(evt.is_set())
996 self.assertIn(proc.exitcode, (0, 255))
997
998 def test_forkserver_sigint(self):
999 # Catchable signal

Callers 2

Calls 14

is_setMethod · 0.95
skipTestMethod · 0.80
EventMethod · 0.80
assertTrueMethod · 0.80
assertInMethod · 0.80
formatMethod · 0.45
get_start_methodMethod · 0.45
ensure_runningMethod · 0.45
ProcessMethod · 0.45
startMethod · 0.45
killMethod · 0.45
sleepMethod · 0.45

Tested by

no test coverage detected