|
4 | 4 | import generate
|
5 | 5 | import shutil
|
6 | 6 | import signal
|
| 7 | +import sys |
7 | 8 | import time
|
8 | 9 | import threading
|
9 | 10 | from colorama import Style
|
10 | 11 | from pathlib import Path
|
11 |
| -from typing import Any, Optional |
| 12 | +from typing import Any, Optional, TextIO |
12 | 13 |
|
13 | 14 | import parallel
|
14 | 15 | from util import *
|
@@ -172,6 +173,23 @@ def _run(self, bar: ProgressBar) -> None:
|
172 | 173 | localbar.done()
|
173 | 174 |
|
174 | 175 |
|
| 176 | +class FuzzProgressBar(ProgressBar): |
| 177 | + def __init__(self, queue: parallel.AbstractQueue, prefix: str, max_len: int): |
| 178 | + super().__init__(prefix, max_len) |
| 179 | + self.queue = queue |
| 180 | + |
| 181 | + def _print( |
| 182 | + self, |
| 183 | + *objects, |
| 184 | + sep: str = "", |
| 185 | + end: str = "\n", |
| 186 | + file: TextIO = sys.stderr, |
| 187 | + flush: bool = True, |
| 188 | + ): |
| 189 | + self.queue.ensure_alive() |
| 190 | + super()._print(*objects, sep=sep, end=end, file=file, flush=flush) |
| 191 | + |
| 192 | + |
175 | 193 | class Fuzz:
|
176 | 194 | def __init__(self, problem: problem.Problem):
|
177 | 195 | self.generators_yaml_mutex = threading.Lock()
|
@@ -256,15 +274,15 @@ def runner(task: GeneratorTask | SubmissionTask) -> None:
|
256 | 274 | ],
|
257 | 275 | )
|
258 | 276 | max_len += len(f"{self.tmp_ids}: ")
|
259 |
| - bar = ProgressBar("Fuzz", max_len=max_len) |
| 277 | + bar = FuzzProgressBar(self.queue, "Fuzz", max_len=max_len) |
260 | 278 |
|
261 | 279 | def soft_exit(sig: Any, frame: Any) -> None:
|
262 | 280 | if self.queue.aborted:
|
263 | 281 | fatal("Running interrupted", force=True)
|
264 | 282 | else:
|
265 | 283 | self.queue.abort()
|
266 | 284 | with bar:
|
267 |
| - bar.clearline() |
| 285 | + print(bar.carriage_return, file=sys.stderr) |
268 | 286 | message(
|
269 | 287 | "Running interrupted (waiting on remaining tasks)\n",
|
270 | 288 | "\nFuzz",
|
|
0 commit comments