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

Method test_resource_tracker

Lib/test/_test_multiprocessing.py:6197–6267  ·  view source on GitHub ↗
(self)

Source from the content-addressed store, hash-verified

6195class TestResourceTracker(unittest.TestCase):
6196
6197 def test_resource_tracker(self):
6198 #
6199 # Check that killing process does not leak named semaphores
6200 #
6201 cmd = '''if 1:
6202 import time, os
6203 import multiprocessing as mp
6204 from multiprocessing import resource_tracker
6205 from multiprocessing.shared_memory import SharedMemory
6206
6207 mp.set_start_method("spawn")
6208
6209
6210 def create_and_register_resource(rtype):
6211 if rtype == "semaphore":
6212 lock = mp.Lock()
6213 return lock, lock._semlock.name
6214 elif rtype == "shared_memory":
6215 sm = SharedMemory(create=True, size=10)
6216 return sm, sm._name
6217 else:
6218 raise ValueError(
6219 "Resource type {{}} not understood".format(rtype))
6220
6221
6222 resource1, rname1 = create_and_register_resource("{rtype}")
6223 resource2, rname2 = create_and_register_resource("{rtype}")
6224
6225 os.write({w}, rname1.encode("ascii") + b"\\n")
6226 os.write({w}, rname2.encode("ascii") + b"\\n")
6227
6228 time.sleep(10)
6229 '''
6230 for rtype in resource_tracker._CLEANUP_FUNCS:
6231 with self.subTest(rtype=rtype):
6232 if rtype in ("noop", "dummy"):
6233 # Artefact resource type used by the resource_tracker
6234 # or tests
6235 continue
6236 r, w = os.pipe()
6237 p = subprocess.Popen([sys.executable,
6238 '-E', '-c', cmd.format(w=w, rtype=rtype)],
6239 pass_fds=[w],
6240 stderr=subprocess.PIPE)
6241 os.close(w)
6242 with open(r, 'rb', closefd=True) as f:
6243 name1 = f.readline().rstrip().decode('ascii')
6244 name2 = f.readline().rstrip().decode('ascii')
6245 _resource_unlink(name1, rtype)
6246 p.terminate()
6247 p.wait()
6248
6249 err_msg = (f"A {rtype} resource was leaked after a process was "
6250 f"abruptly terminated")
6251 for _ in support.sleeping_retry(support.SHORT_TIMEOUT,
6252 err_msg):
6253 try:
6254 _resource_unlink(name2, rtype)

Callers

nothing calls this directly

Calls 14

terminateMethod · 0.95
waitMethod · 0.95
_resource_unlinkFunction · 0.85
assertInMethod · 0.80
assertRegexMethod · 0.80
openFunction · 0.50
subTestMethod · 0.45
pipeMethod · 0.45
formatMethod · 0.45
closeMethod · 0.45
decodeMethod · 0.45
rstripMethod · 0.45

Tested by

no test coverage detected