comparison env/lib/python3.7/site-packages/galaxy/util/lazy_process.py @ 2:6af9afd405e9 draft

"planemo upload commit 0a63dd5f4d38a1f6944587f52a8cd79874177fc1"
author shellac
date Thu, 14 May 2020 14:56:58 -0400
parents 26e78fe6e8c4
children
comparison
equal deleted inserted replaced
1:75ca89e9b81c 2:6af9afd405e9
1 import subprocess
2 import threading
3 import time
4
5
6 class LazyProcess(object):
7 """ Abstraction describing a command line launching a service - probably
8 as needed as functionality is accessed in Galaxy.
9 """
10
11 def __init__(self, command_and_args):
12 self.command_and_args = command_and_args
13 self.thread_lock = threading.Lock()
14 self.allow_process_request = True
15 self.process = None
16
17 def start_process(self):
18 with self.thread_lock:
19 if self.allow_process_request:
20 self.allow_process_request = False
21 t = threading.Thread(target=self.__start)
22 t.daemon = True
23 t.start()
24
25 def __start(self):
26 with self.thread_lock:
27 self.process = subprocess.Popen(self.command_and_args, close_fds=True)
28
29 def shutdown(self):
30 with self.thread_lock:
31 self.allow_process_request = False
32 if self.running:
33 self.process.terminate()
34 time.sleep(.01)
35 if self.running:
36 self.process.kill()
37
38 @property
39 def running(self):
40 return self.process and not self.process.poll()
41
42
43 class NoOpLazyProcess(object):
44 """ LazyProcess abstraction meant to describe potentially optional
45 services, in those cases where one is not configured or valid, this
46 class can be used in place of LazyProcess.
47 """
48
49 def start_process(self):
50 return
51
52 def shutdown(self):
53 return
54
55 @property
56 def running(self):
57 return False