def _terminate_task(self, task):
"""Internal use only.
"""
self._lock.acquire()
tid = task._id
task = self._tasks.get(tid, None)
if task is None:
logger.warning('invalid task %s to terminate', tid)
self._lock.release()
return -1
# TODO: if currently waiting I/O or holding locks, warn?
if task._state == Pycos._Running:
logger.warning('task to terminate %s/%s is running', task._name, tid)
else:
self._suspended.discard(tid)
self._scheduled.add(tid)
task._state = Pycos._Scheduled
task._timeout = None
task._callers = []
if self._polling and len(self._scheduled) == 1:
self._notifier.interrupt()
task._exceptions.append((GeneratorExit, GeneratorExit('close')))
self._lock.release()
return 0
评论列表
文章目录