Skip to content
Snippets Groups Projects
Commit 8ac383d7 authored by Paul McCarthy's avatar Paul McCarthy
Browse files

wxIdleLoop absorbs errors thrown by tasks, prints a warning.

parent 88887dbe
No related branches found
No related tags found
No related merge requests found
...@@ -247,22 +247,30 @@ def _wxIdleLoop(ev): ...@@ -247,22 +247,30 @@ def _wxIdleLoop(ev):
now = time.time() now = time.time()
elapsed = now - task.schedtime elapsed = now - task.schedtime
queueSizeOffset = 0 queueSizeOffset = 0
taskName = task.name
funcName = getattr(task.task, '__name__', '<unknown>')
if taskName is None: taskName = funcName
else: taskName = '{} [{}]'.format(taskName, funcName)
# Has enouggh time elapsed # Has enouggh time elapsed
# since the task was scheduled? # since the task was scheduled?
# If not, re-queue the task. # If not, re-queue the task.
if elapsed < task.after: if elapsed < task.after:
log.debug('Re-queueing function ({}) on wx idle ' log.debug('Re-queueing function ({}) on wx idle loop'.format(taskName))
'loop'.format(getattr(task.task, '__name__', '<unknown>')))
_idleQueue.put_nowait(task) _idleQueue.put_nowait(task)
queueSizeOffset = 1 queueSizeOffset = 1
# Has the task timed out? # Has the task timed out?
elif task.timeout == 0 or (elapsed < task.timeout): elif task.timeout == 0 or (elapsed < task.timeout):
log.debug('Running function ({}) on wx idle ' log.debug('Running function ({}) on wx idle loop'.format(taskName))
'loop'.format(getattr(task.task, '__name__', '<unknown>')))
task.task(*task.args, **task.kwargs) try:
task.task(*task.args, **task.kwargs)
except Exception as e:
log.warning('Idle task {} crashed - {}: {}'.format(
taskName, type(e).__name__, str(e)))
if task.name is not None: if task.name is not None:
_idleQueueSet.discard(task.name) _idleQueueSet.discard(task.name)
......
...@@ -14,7 +14,8 @@ import inspect ...@@ -14,7 +14,8 @@ import inspect
import collections import collections
import props import props
import async
import fsl.utils.async as async
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment