-
Notifications
You must be signed in to change notification settings - Fork 42
/
Copy pathraspberryturkd.py
43 lines (37 loc) · 1.37 KB
/
raspberryturkd.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import logging
import signal
import time
from daemon import runner
import raspberryturk
from raspberryturk.embedded.agent import Agent
class RaspberryTurkDaemon(object):
def __init__(self):
self.stdin_path = '/dev/null'
self.stdout_path = raspberryturk.log_path('raspberryturk.out')
self.stderr_path = raspberryturk.log_path('raspberryturk.err')
self.pidfile_path = raspberryturk.run_path('raspberryturkd.pid')
self.pidfile_timeout = 5
self._interrupt_signum = None
def run(self):
raspberryturk.setup_file_logging()
self.logger = logging.getLogger(__name__)
self.logger.info("Starting RaspberryTurkDaemon.")
time.sleep(1)
with Agent() as a:
while self._interrupt_signum is None:
a.perception_action_sequence()
self.logger.warn("Received signal {}.".format(self._interrupt_signum))
self.logger.info("Stopping RaspberryTurkDaemon.")
def interrupt_handler(self, signum, frame):
self._interrupt_signum = signum
def main():
rtd = RaspberryTurkDaemon()
daemon_runner = runner.DaemonRunner(rtd)
daemon_runner.daemon_context.signal_map = {
signal.SIGINT: rtd.interrupt_handler,
signal.SIGTERM: rtd.interrupt_handler,
signal.SIGHUP: 'terminate',
}
daemon_runner.do_action()
if __name__ == '__main__':
main()