bpo-36719: regrtest closes explicitly WindowsLoadTracker (GH-12965) · python/cpython@00db7c7 (original) (raw)

`@@ -98,6 +98,8 @@ def init(self):

`

98

98

`# used by --junit-xml

`

99

99

`self.testsuite_xml = None

`

100

100

``

``

101

`+

self.win_load_tracker = None

`

``

102

+

101

103

`def get_executed(self):

`

102

104

`return (set(self.good) | set(self.bad) | set(self.skipped)

`

103

105

`| set(self.resource_denieds) | set(self.environment_changed)

`

`@@ -154,9 +156,9 @@ def display_progress(self, test_index, text):

`

154

156

`line = f"[{line}] {text}"

`

155

157

``

156

158

`# add the system load prefix: "load avg: 1.80 "

`

157

``

`-

if self.getloadavg:

`

158

``

`-

load_avg_1min = self.getloadavg()

`

159

``

`-

line = f"load avg: {load_avg_1min:.2f} {line}"

`

``

159

`+

load_avg = self.getloadavg()

`

``

160

`+

if load_avg is not None:

`

``

161

`+

line = f"load avg: {load_avg:.2f} {line}"

`

160

162

``

161

163

`# add the timestamp prefix: "0:01:05 "

`

162

164

`test_time = time.monotonic() - self.start_time

`

`@@ -490,6 +492,10 @@ def run_tests(self):

`

490

492

`self.run_tests_sequential()

`

491

493

``

492

494

`def finalize(self):

`

``

495

`+

if self.win_load_tracker is not None:

`

``

496

`+

self.win_load_tracker.close()

`

``

497

`+

self.win_load_tracker = None

`

``

498

+

493

499

`if self.next_single_filename:

`

494

500

`if self.next_single_test:

`

495

501

`with open(self.next_single_filename, 'w') as fp:

`

`@@ -560,6 +566,15 @@ def main(self, tests=None, **kwargs):

`

560

566

`with support.temp_cwd(test_cwd, quiet=True):

`

561

567

`self._main(tests, kwargs)

`

562

568

``

``

569

`+

def getloadavg(self):

`

``

570

`+

if self.win_load_tracker is not None:

`

``

571

`+

return self.win_load_tracker.getloadavg()

`

``

572

+

``

573

`+

if hasattr(os, 'getloadavg'):

`

``

574

`+

return os.getloadavg()[0]

`

``

575

+

``

576

`+

return None

`

``

577

+

563

578

`def _main(self, tests, kwargs):

`

564

579

`if self.ns.huntrleaks:

`

565

580

`warmup, repetitions, _ = self.ns.huntrleaks

`

`@@ -591,23 +606,17 @@ def _main(self, tests, kwargs):

`

591

606

`self.list_cases()

`

592

607

`sys.exit(0)

`

593

608

``

594

``

`-

self.getloadavg = None

`

595

609

`# If we're on windows and this is the parent runner (not a worker),

`

596

``

`-

report the load average.

`

597

``

`-

if hasattr(os, 'getloadavg'):

`

598

``

`-

def getloadavg_1m():

`

599

``

`-

return os.getloadavg()[0]

`

600

``

`-

self.getloadavg = getloadavg_1m

`

601

``

`-

elif sys.platform == 'win32' and (self.ns.worker_args is None):

`

``

610

`+

track the load average.

`

``

611

`+

if sys.platform == 'win32' and (self.ns.worker_args is None):

`

602

612

`from test.libregrtest.win_utils import WindowsLoadTracker

`

603

613

``

604

614

`try:

`

605

``

`-

load_tracker = WindowsLoadTracker()

`

606

``

`-

self.getloadavg = load_tracker.getloadavg

`

``

615

`+

self.win_load_tracker = WindowsLoadTracker()

`

607

616

`except FileNotFoundError as error:

`

608

617

`# Windows IoT Core and Windows Nano Server do not provide

`

609

618

`# typeperf.exe for x64, x86 or ARM

`

610

``

`-

print('Failed to create WindowsLoadTracker: {}'.format(error))

`

``

619

`+

print(f'Failed to create WindowsLoadTracker: {error}')

`

611

620

``

612

621

`self.run_tests()

`

613

622

`self.display_result()

`