Skip to content

Commit 8234ccf

Browse files
authored
Merge pull request #64 from simvue-io/improved_worker
Main process tells worker when to exit
2 parents 53e1e2f + 7fecc23 commit 8234ccf

File tree

4 files changed

+15
-5
lines changed

4 files changed

+15
-5
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
# Change log
22

3+
## v0.10.1
4+
5+
* The worker process now no longer gives a long delay when a run has finished (now at most ~1 second).
6+
* The worker process ends when the `Run()` context ends or `close` is called, rather than only when the main process exits.
7+
38
## v0.10.0
49

510
* The `client` class can now be used to retrieve runs.

simvue/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@
22
from simvue.client import Client
33
from simvue.handler import Handler
44
from simvue.models import RunInput
5-
__version__ = '0.10.0'
5+
__version__ = '0.10.1'

simvue/run.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,7 @@ def __enter__(self):
162162

163163
def __exit__(self, type, value, traceback):
164164
if self._name and self._status == 'running':
165+
self._shutdown_event.set()
165166
if not type:
166167
self.set_status('completed')
167168
else:
@@ -203,8 +204,10 @@ def _start(self, reconnect=False):
203204

204205
self._metrics_queue = multiprocessing.Manager().Queue(maxsize=self._queue_size)
205206
self._events_queue = multiprocessing.Manager().Queue(maxsize=self._queue_size)
207+
self._shutdown_event = multiprocessing.Manager().Event()
206208
self._worker = Worker(self._metrics_queue,
207209
self._events_queue,
210+
self._shutdown_event,
208211
self._uuid,
209212
self._name,
210213
self._url,
@@ -659,8 +662,9 @@ def close(self):
659662
if not self._active:
660663
self._error('Run is not active')
661664
return False
662-
665+
663666
self.set_status('completed')
667+
self._shutdown_event.set()
664668

665669
def set_folder_details(self, path, metadata={}, tags=[], description=None):
666670
"""

simvue/worker.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,12 @@ def update_processes(parent, processes):
2929

3030

3131
class Worker(threading.Thread):
32-
def __init__(self, metrics_queue, events_queue, uuid, run_name, url, headers, mode, pid, resources_metrics_interval):
32+
def __init__(self, metrics_queue, events_queue, shutdown_event, uuid, run_name, url, headers, mode, pid, resources_metrics_interval):
3333
threading.Thread.__init__(self)
3434
self._parent_thread = threading.currentThread()
3535
self._metrics_queue = metrics_queue
3636
self._events_queue = events_queue
37+
self._shutdown_event = shutdown_event
3738
self._run_name = run_name
3839
self._uuid = uuid
3940
self._url = url
@@ -144,11 +145,11 @@ def run(self):
144145
pass
145146
buffer = []
146147

147-
if not self._parent_thread.is_alive():
148+
if self._shutdown_event.is_set() or not self._parent_thread.is_alive():
148149
if self._metrics_queue.empty() and self._events_queue.empty():
149150
sys.exit(0)
150151
else:
151152
counter = 0
152-
while counter < POLLING_INTERVAL and self._parent_thread.is_alive():
153+
while counter < POLLING_INTERVAL and not self._shutdown_event.is_set() and self._parent_thread.is_alive():
153154
time.sleep(1)
154155
counter += 1

0 commit comments

Comments
 (0)