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

Class WorkerThread

Lib/test/libregrtest/run_workers.py:108–453  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

106
107
108class WorkerThread(threading.Thread):
109 def __init__(self, worker_id: int, runner: "RunWorkers") -> None:
110 super().__init__()
111 self.worker_id = worker_id
112 self.runtests = runner.runtests
113 self.pending = runner.pending
114 self.output = runner.output
115 self.timeout = runner.worker_timeout
116 self.log = runner.log
117 self.test_name = _NOT_RUNNING
118 self.start_time = time.monotonic()
119 self._popen: subprocess.Popen[str] | None = None
120 self._killed = False
121 self._stopped = False
122
123 def __repr__(self) -> str:
124 info = [f'WorkerThread #{self.worker_id}']
125 if self.is_alive():
126 info.append("running")
127 else:
128 info.append('stopped')
129 test = self.test_name
130 if test:
131 info.append(f'test={test}')
132 popen = self._popen
133 if popen is not None:
134 dt = time.monotonic() - self.start_time
135 info.extend((f'pid={popen.pid}',
136 f'time={format_duration(dt)}'))
137 return '<%s>' % ' '.join(info)
138
139 def _kill(self) -> None:
140 popen = self._popen
141 if popen is None:
142 return
143
144 if self._killed:
145 return
146 self._killed = True
147
148 use_killpg = USE_PROCESS_GROUP
149 if use_killpg:
150 parent_sid = os.getsid(0)
151 sid = os.getsid(popen.pid)
152 use_killpg = (sid != parent_sid)
153
154 if use_killpg:
155 what = f"{self} process group"
156 else:
157 what = f"{self} process"
158
159 print(f"Kill {what}", file=sys.stderr, flush=True)
160 try:
161 if use_killpg:
162 os.killpg(popen.pid, signal.SIGKILL)
163 else:
164 popen.kill()
165 except ProcessLookupError:

Callers 1

start_workersMethod · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…