def register_task(self, name, task, delay=None, value=None, interval=None):
"""
Register a task so it can be canceled at shutdown time or by name.
"""
assert not self.is_pending_task_active(name), name
assert isinstance(task, (Deferred, DelayedCall, LoopingCall)), (task, type(task) == type(Deferred))
if delay is not None:
if isinstance(task, Deferred):
if value is None:
raise ValueError("Expecting value to fire the Deferred with")
dc = self._reactor.callLater(delay, task.callback, value)
elif isinstance(task, LoopingCall):
if interval is None:
raise ValueError("Expecting interval for delayed LoopingCall")
dc = self._reactor.callLater(delay, task.start, interval)
else:
raise ValueError("Expecting Deferred or LoopingCall if task is delayed")
task = (dc, task)
self._maybe_clean_task_list()
with self._task_lock:
self._pending_tasks[name] = task
return task
评论列表
文章目录