|
1 | 1 | """Tools to analyze tasks running in asyncio programs.""" |
2 | 2 |
|
3 | | -from collections import defaultdict, namedtuple |
4 | 3 | import csv |
5 | | -from itertools import count |
6 | | -from enum import Enum, StrEnum, auto |
7 | 4 | import sys |
8 | 5 | from _remote_debugging import RemoteUnwinder, FrameInfo |
| 6 | +from collections import defaultdict |
| 7 | +from enum import Enum, StrEnum, auto |
| 8 | +from itertools import chain, count |
9 | 9 |
|
10 | 10 |
|
11 | 11 | class NodeType(Enum): |
@@ -248,28 +248,36 @@ def display_awaited_by_tasks_table(pid, *, format=TaskTableOutputFormat.table): |
248 | 248 | if format == TaskTableOutputFormat.table: |
249 | 249 | _display_awaited_by_tasks_table(table) |
250 | 250 | else: |
251 | | - _display_awaited_by_tasks_csv(table, format) |
| 251 | + _display_awaited_by_tasks_csv(table, format=format) |
| 252 | + |
252 | 253 |
|
| 254 | +_row_header = ('tid', 'task id', 'task name', 'coroutine stack', |
| 255 | + 'awaiter chain', 'awaiter name', 'awaiter id') |
253 | 256 |
|
254 | | -def _display_awaited_by_tasks_table(table) -> None: |
255 | | - # Print the table in a simple tabular format |
256 | | - print( |
257 | | - f"{'tid':<10} {'task id':<20} {'task name':<20} {'coroutine stack':<50} {'awaiter chain':<50} {'awaiter name':<15} {'awaiter id':<15}" |
258 | | - ) |
259 | | - print("-" * 180) |
| 257 | + |
| 258 | +def _display_awaited_by_tasks_table(table): |
| 259 | + """Print the table in a simple tabular format.""" |
| 260 | + print(_fmt_table_row(*_row_header)) |
| 261 | + print('-' * 180) |
260 | 262 | for row in table: |
261 | | - print(f"{row[0]:<10} {row[1]:<20} {row[2]:<20} {row[3]:<50} {row[4]:<50} {row[5]:<15} {row[6]:<15}") |
| 263 | + print(_fmt_table_row(*row)) |
| 264 | + |
| 265 | + |
| 266 | +def _fmt_table_row(tid, task_id, task_name, coro_stack, |
| 267 | + awaiter_chain, awaiter_name, awaiter_id): |
| 268 | + # Format a single row for the table format |
| 269 | + return (f'{tid:<10} {task_id:<20} {task_name:<20} {coro_stack:<50} ' |
| 270 | + f'{awaiter_chain:<50} {awaiter_name:<15} {awaiter_id:<15}') |
262 | 271 |
|
263 | 272 |
|
264 | | -def _display_awaited_by_tasks_csv(table, format: TaskTableOutputFormat) -> None: |
265 | | - csv_header = ('tid', 'task id', 'task name', 'coroutine stack', |
266 | | - 'awaiter chain', 'awaiter name', 'awaiter id') |
| 273 | +def _display_awaited_by_tasks_csv(table, *, format): |
| 274 | + """Print the table in CSV format""" |
267 | 275 | if format == TaskTableOutputFormat.csv: |
268 | 276 | delimiter = ',' |
269 | 277 | else: |
270 | 278 | raise ValueError(f"Unknown output format: {format}") |
271 | 279 | csv_writer = csv.writer(sys.stdout, delimiter=delimiter) |
272 | | - csv_writer.writerow(csv_header) |
| 280 | + csv_writer.writerow(_row_header) |
273 | 281 | csv_writer.writerows(table) |
274 | 282 |
|
275 | 283 |
|
|
0 commit comments