def _callback_wrapper(self, command_id, command_obj, callback, greenlet):
assert callable(callback) or callback is None
if not self._queue.empty():
try:
next_cmd_id = self._queue.get_nowait()
log.d("Starting command id", next_cmd_id, " next in queue in service '{}'".format(self.name))
self._start(next_cmd_id)
except queue.Empty:
pass
command_obj.state = command.CommandState.finished
try:
greenlet.get()
except BaseException:
log.exception("Command", "{}({})".format(command_obj.__class__.__name__, command_id), "raised an exception")
command_obj.state = command.CommandState.failed
command_obj.exception = greenlet.exception
if constants.dev:
raise # doesnt work
if isinstance(greenlet.value, gevent.GreenletExit):
command_obj.state = command.CommandState.stopped
greenlet.value = None
if command_id in self._decorators:
greenlet.value = self._decorators[command_id](greenlet.value)
log.d(
"Command id", command_id, "in service '{}'".format(
self.name), "has finished running with state:", str(
command_obj.state))
if callback:
callback(greenlet.value)
评论列表
文章目录