Skip to content

Commit 6548a4e

Browse files
committed
Add even more detailed stats
1 parent 2fc4db0 commit 6548a4e

File tree

4 files changed

+14
-5
lines changed

4 files changed

+14
-5
lines changed

mypy/build.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1256,7 +1256,10 @@ def wait_for_done_workers(
12561256

12571257
done_sccs = []
12581258
results = {}
1259-
for idx in ready_to_read([w.conn for w in self.workers], WORKER_DONE_TIMEOUT):
1259+
t0 = time.time()
1260+
ready = ready_to_read([w.conn for w in self.workers], WORKER_DONE_TIMEOUT)
1261+
t1 = time.time()
1262+
for idx in ready:
12601263
buf = receive(self.workers[idx].conn)
12611264
assert read_tag(buf) == SCC_RESPONSE_MESSAGE
12621265
data = SccResponseMessage.read(buf)
@@ -1267,6 +1270,7 @@ def wait_for_done_workers(
12671270
assert data.result is not None
12681271
results.update(data.result)
12691272
done_sccs.append(self.scc_by_id[scc_id])
1273+
self.add_stats(scc_wait_time=t1 - t0, scc_receive_time=time.time() - t1)
12701274
self.submit_to_workers(graph) # advance after some workers are free.
12711275
return (
12721276
done_sccs,

mypy/build_worker/worker.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,10 @@
4545
process_stale_scc,
4646
)
4747
from mypy.cache import Tag, read_int_opt
48-
from mypy.defaults import RECURSION_LIMIT, WORKER_CONNECTION_TIMEOUT
48+
from mypy.defaults import RECURSION_LIMIT, WORKER_CONNECTION_TIMEOUT, WORKER_IDLE_TIMEOUT
4949
from mypy.errors import CompileError, ErrorInfo, Errors, report_internal_error
5050
from mypy.fscache import FileSystemCache
51-
from mypy.ipc import IPCException, IPCServer, receive, send
51+
from mypy.ipc import IPCException, IPCServer, ready_to_read, receive, send
5252
from mypy.modulefinder import BuildSource, BuildSourceSet, compute_search_paths
5353
from mypy.nodes import FileRawData
5454
from mypy.options import Options
@@ -170,9 +170,13 @@ def serve(server: IPCServer, ctx: ServerContext) -> None:
170170
# Notify coordinator we are ready to start processing SCCs.
171171
send(server, AckMessage())
172172
while True:
173+
t0 = time.time()
174+
ready_to_read([server], WORKER_IDLE_TIMEOUT)
175+
t1 = time.time()
173176
buf = receive(server)
174177
assert read_tag(buf) == SCC_REQUEST_MESSAGE
175178
scc_message = SccRequestMessage.read(buf)
179+
manager.add_stats(scc_wait_time=t1 - t0, scc_receive_time=time.time() - t1)
176180
scc_id = scc_message.scc_id
177181
if scc_id is None:
178182
manager.dump_stats()

mypy/defaults.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,4 +48,5 @@
4848
WORKER_START_INTERVAL: Final = 0.01
4949
WORKER_START_TIMEOUT: Final = 3
5050
WORKER_CONNECTION_TIMEOUT: Final = 10
51+
WORKER_IDLE_TIMEOUT: Final = 600
5152
WORKER_DONE_TIMEOUT: Final = 600

mypy/ipc.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
from collections.abc import Callable
1717
from select import select
1818
from types import TracebackType
19-
from typing import Final
19+
from typing import Final, Sequence
2020
from typing_extensions import Self
2121

2222
from librt.base64 import urlsafe_b64encode
@@ -365,7 +365,7 @@ def read_status(status_file: str) -> dict[str, object]:
365365
return data
366366

367367

368-
def ready_to_read(conns: list[IPCClient], timeout: float | None = None) -> list[int]:
368+
def ready_to_read(conns: Sequence[IPCBase], timeout: float | None = None) -> list[int]:
369369
"""Wait until some connections are readable.
370370
371371
Return index of each readable connection in the original list.

0 commit comments

Comments
 (0)