Mercurial > repos > shellac > guppy_basecaller
diff env/lib/python3.7/site-packages/galaxy/util/lazy_process.py @ 0:26e78fe6e8c4 draft
"planemo upload commit c699937486c35866861690329de38ec1a5d9f783"
author | shellac |
---|---|
date | Sat, 02 May 2020 07:14:21 -0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/env/lib/python3.7/site-packages/galaxy/util/lazy_process.py Sat May 02 07:14:21 2020 -0400 @@ -0,0 +1,57 @@ +import subprocess +import threading +import time + + +class LazyProcess(object): + """ Abstraction describing a command line launching a service - probably + as needed as functionality is accessed in Galaxy. + """ + + def __init__(self, command_and_args): + self.command_and_args = command_and_args + self.thread_lock = threading.Lock() + self.allow_process_request = True + self.process = None + + def start_process(self): + with self.thread_lock: + if self.allow_process_request: + self.allow_process_request = False + t = threading.Thread(target=self.__start) + t.daemon = True + t.start() + + def __start(self): + with self.thread_lock: + self.process = subprocess.Popen(self.command_and_args, close_fds=True) + + def shutdown(self): + with self.thread_lock: + self.allow_process_request = False + if self.running: + self.process.terminate() + time.sleep(.01) + if self.running: + self.process.kill() + + @property + def running(self): + return self.process and not self.process.poll() + + +class NoOpLazyProcess(object): + """ LazyProcess abstraction meant to describe potentially optional + services, in those cases where one is not configured or valid, this + class can be used in place of LazyProcess. + """ + + def start_process(self): + return + + def shutdown(self): + return + + @property + def running(self): + return False