10000 bpo-36719: regrtest closes explicitly WindowsLoadTracker (GH-12965) · python/cpython@00db7c7 · GitHub
[go: up one dir, main page]

Skip to content

Commit 00db7c7

Browse files
authored
bpo-36719: regrtest closes explicitly WindowsLoadTracker (GH-12965)
Regrtest.finalize() now closes explicitly the WindowsLoadTracker instance.
1 parent 837acc1 commit 00db7c7

File tree

2 files changed

+29
-14
lines changed

2 files changed

+29
-14
lines changed

Lib/test/libregrtest/main.py

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,8 @@ def __init__(self):
9898
# used by --junit-xml
9999
self.testsuite_xml = None
100100

101+
self.win_load_tracker = None
102+
101103
def get_executed(self):
102104
return (set(self.good) | set(self.bad) | set(self.skipped)
103105
| set(self.resource_denieds) | set(self.environment_changed)
@@ -154,9 +156,9 @@ def display_progress(self, test_index, text):
154156
line = f"[{line}] {text}"
155157

156158
# 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}"
160162

161163
# add the timestamp prefix: "0:01:05 "
162164
test_time = time.monotonic() - self.start_time
@@ -490,6 +492,10 @@ def run_tests(self):
490492
self.run_tests_sequential()
491493

492494
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+
493499
if self.next_single_filename:
494500
if self.next_single_test:
495501
with open(self.next_single_filename, 'w') as fp:
@@ -560,6 +566,15 @@ def main(self, tests=None, **kwargs):
560566
with support.temp_cwd(test_cwd, quiet=True):
561567
self._main(tests, kwargs)
562568

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+
563578
def _main(self, tests, kwargs):
564579
if self.ns.huntrleaks:
565580
warmup, repetitions, _ = self.ns.huntrleaks
@@ -591,23 +606,17 @@ def _main(self, tests, kwargs):
591606
self.list_cases()
592607
sys.exit(0)
593608

594-
self.getloadavg = None
595609
# 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):
602612
from test.libregrtest.win_utils import WindowsLoadTracker
603613

604614
try:
605-
load_tracker = WindowsLoadTracker()
606-
self.getloadavg = load_tracker.getloadavg
615+
self.win_load_tracker = WindowsLoadTracker()
607616
except FileNotFoundError as error:
608617
# Windows IoT Core and Windows Nano Server do not provide
609618
# typeperf.exe for x64, x86 or ARM
610-
print('Failed to create WindowsLoadTracker: {}'.format(error))
619+
print(f'Failed to create WindowsLoadTracker: {error}')
611620

612621
self.run_tests()
613622
self.display_result()

Lib/test/libregrtest/win_utils.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,15 @@ def start(self):
6060
# Close our copy of the write end of the pipe
6161
os.close(command_stdout)
6262

63-
def __del__(self):
63+
def close(self):
64+
if self.p is None:
65+
return
6466
self.p.kill()
6567
self.p.wait()
68+
self.p = None
69+
70+
def __del__(self):
71+
self.close()
6672

6773
def read_output(self):
6874
import _winapi

0 commit comments

Comments
 (0)
0