Message ID | 20240304211655.20174-5-crwood@redhat.com |
---|---|
State | New |
Headers | show |
Series | rteval: Fixes and speedups | expand |
On Mon, 4 Mar 2024, Crystal Wood wrote: > Waiting up to a full minute for rteval to stop on ctrl-c can be > frustrating. Likewise, if a very short run is requested > (e.g. for testing rteval itself) rounding it up to a minute is > not polite. > > Signed-off-by: Crystal Wood <crwood@redhat.com> > --- > rteval/__init__.py | 11 +++++------ > 1 file changed, 5 insertions(+), 6 deletions(-) > > diff --git a/rteval/__init__.py b/rteval/__init__.py > index 5d43615af5bb..72e3412a860e 100644 > --- a/rteval/__init__.py > +++ b/rteval/__init__.py > @@ -32,12 +32,11 @@ RTEVAL_VERSION = version.RTEVAL_VERSION > > earlystop = False > > -stopsig_received = False > +stopsig = threading.Event() > def sig_handler(signum, frame): > """ Handle SIGINT (CTRL + C) or SIGTERM (Termination signal) """ > if signum in (signal.SIGINT, signal.SIGTERM): > - global stopsig_received > - stopsig_received = True > + stopsig.set() > print("*** stop signal received - stopping rteval run ***") > else: > raise RuntimeError(f"SIGNAL received! ({signum})") > @@ -208,8 +207,8 @@ class RtEval(rtevalReport): > currtime = time.time() > rpttime = currtime + report_interval > load_avg_checked = 5 > - while (currtime <= stoptime) and not stopsig_received: > - time.sleep(60.0) > + while (currtime <= stoptime) and not stopsig.is_set(): > + stopsig.wait(min(stoptime - currtime, 60.0)) > if not measure_profile.isAlive(): > stoptime = currtime > earlystop = True > @@ -238,7 +237,7 @@ class RtEval(rtevalReport): > signal.signal(signal.SIGTERM, signal.SIG_DFL) > > except RuntimeError as err: > - if not stopsig_received: > + if not stopsig.is_set(): > raise RuntimeError(f"appeared during measurement: {err}") > > finally: > -- Signed-off-by: John Kacur <jkacur@redhat.com>
diff --git a/rteval/__init__.py b/rteval/__init__.py index 5d43615af5bb..72e3412a860e 100644 --- a/rteval/__init__.py +++ b/rteval/__init__.py @@ -32,12 +32,11 @@ RTEVAL_VERSION = version.RTEVAL_VERSION earlystop = False -stopsig_received = False +stopsig = threading.Event() def sig_handler(signum, frame): """ Handle SIGINT (CTRL + C) or SIGTERM (Termination signal) """ if signum in (signal.SIGINT, signal.SIGTERM): - global stopsig_received - stopsig_received = True + stopsig.set() print("*** stop signal received - stopping rteval run ***") else: raise RuntimeError(f"SIGNAL received! ({signum})") @@ -208,8 +207,8 @@ class RtEval(rtevalReport): currtime = time.time() rpttime = currtime + report_interval load_avg_checked = 5 - while (currtime <= stoptime) and not stopsig_received: - time.sleep(60.0) + while (currtime <= stoptime) and not stopsig.is_set(): + stopsig.wait(min(stoptime - currtime, 60.0)) if not measure_profile.isAlive(): stoptime = currtime earlystop = True @@ -238,7 +237,7 @@ class RtEval(rtevalReport): signal.signal(signal.SIGTERM, signal.SIG_DFL) except RuntimeError as err: - if not stopsig_received: + if not stopsig.is_set(): raise RuntimeError(f"appeared during measurement: {err}") finally:
Waiting up to a full minute for rteval to stop on ctrl-c can be frustrating. Likewise, if a very short run is requested (e.g. for testing rteval itself) rounding it up to a minute is not polite. Signed-off-by: Crystal Wood <crwood@redhat.com> --- rteval/__init__.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-)