projects
/
saartuer.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
344d58d
)
libtuer: add a fire_and_forget for python functions
author
Ralf Jung
<post@ralfj.de>
Thu, 24 Oct 2013 17:48:28 +0000
(19:48 +0200)
committer
Ralf Jung
<post@ralfj.de>
Thu, 24 Oct 2013 17:48:28 +0000
(19:48 +0200)
libtuer.py
patch
|
blob
|
history
statemachine.py
patch
|
blob
|
history
diff --git
a/libtuer.py
b/libtuer.py
index 1789b90ce8c9307f22e06d9d5cdfe3623c456988..835bf6d51003e22dd8a2d5e3b9ed72e85fae0577 100644
(file)
--- a/
libtuer.py
+++ b/
libtuer.py
@@
-58,16
+58,26
@@
class Logger:
logger = Logger()
logger = Logger()
+# run a Python command asynchronously
+def fire_and_forget(f):
+ def _fire_and_forget():
+ try:
+ f()
+ except Exception as e:
+ logger.critical("fire_and_forget: Got exception out of callback: %s" % str(e))
+ logger.debug(traceback.format_exc())
+ t = threading.Thread(target=_fire_and_forget)
+ t.start()
+
# run a command asynchronously and log the return value if not 0
# prefix must be a string identifying the code position where the call came from
# run a command asynchronously and log the return value if not 0
# prefix must be a string identifying the code position where the call came from
-def fire_and_forget (cmd, log, prefix):
- def _fire_and_forget ():
+def fire_and_forget
_cmd
(cmd, log, prefix):
+ def _fire_and_forget
_cmd
():
with open("/dev/null", "w") as fnull:
retcode = subprocess.call(cmd, stdout=fnull, stderr=fnull)
if retcode is not 0:
logger.error("%sReturn code %d at command: %s" % (prefix,retcode,str(cmd)))
with open("/dev/null", "w") as fnull:
retcode = subprocess.call(cmd, stdout=fnull, stderr=fnull)
if retcode is not 0:
logger.error("%sReturn code %d at command: %s" % (prefix,retcode,str(cmd)))
- t = threading.Thread(target=_fire_and_forget)
- t.start()
+ fire_and_forget(_fire_and_forget_cmd)
# Threaded callback class
class ThreadFunction():
# Threaded callback class
class ThreadFunction():
diff --git
a/statemachine.py
b/statemachine.py
index a3c4affb860ed23733d41fbef7f4868f22c9889e..0f325a80ea93a61bad5a4ebfb61bf4533e341c47 100644
(file)
--- a/
statemachine.py
+++ b/
statemachine.py
@@
-11,7
+11,7
@@
def play_sound (what):
logger.error("StateMachine: Unable to list sound files in %s" % (SOUNDS_DIRECTORY+what))
return
soundfile = SOUNDS_DIRECTORY + what + '/' + random.choice(soundfiles)
logger.error("StateMachine: Unable to list sound files in %s" % (SOUNDS_DIRECTORY+what))
return
soundfile = SOUNDS_DIRECTORY + what + '/' + random.choice(soundfiles)
- fire_and_forget ([SOUNDS_PLAYER,soundfile], logger.error, "StateMachine: ")
+ fire_and_forget
_cmd
([SOUNDS_PLAYER,soundfile], logger.error, "StateMachine: ")
# StateUnlocking constants
# StateUnlocking constants
@@
-175,8
+175,7
@@
class StateMachine():
def _close_after_time():
time.sleep(FALLBACK_LEAVE_DELAY_LOCK)
self.actor().act(Actor.CMD_LOCK)
def _close_after_time():
time.sleep(FALLBACK_LEAVE_DELAY_LOCK)
self.actor().act(Actor.CMD_LOCK)
- t = threading.Thread(target=_close_after_time)
- t.start()
+ fire_and_forget(_close_after_time)
# not calling superclass because we want to stay in fallback mode
def handle_wakeup_event(self):
# blink red LED
# not calling superclass because we want to stay in fallback mode
def handle_wakeup_event(self):
# blink red LED