|
|
@@ -30,8 +30,8 @@ exit = -1
|
|
|
done = 0
|
|
|
cont = 1
|
|
|
again = 2 # return this when a doLater needs to be repeated (to be able to
|
|
|
- # avoid having to remove and add a new doLater for continuously repeating
|
|
|
- # tasks)
|
|
|
+ # avoid having to remove and add a new doLater for continuously
|
|
|
+ # repeating tasks)
|
|
|
|
|
|
# Task needs this because it might run before __builtin__.globalClock
|
|
|
# can be set.
|
|
|
@@ -76,6 +76,8 @@ def print_exc_plus():
|
|
|
class Task:
|
|
|
count = 0
|
|
|
def __init__(self, callback, priority = 0):
|
|
|
+ #if __debug__:
|
|
|
+ # self.debugInitTraceback = StackTrace("add task", 1, 10)
|
|
|
# Unique ID for each task
|
|
|
self.id = Task.count
|
|
|
Task.count += 1
|
|
|
@@ -380,7 +382,8 @@ class TaskManager:
|
|
|
# sweep garbage collector. Returns the number of tasks that have
|
|
|
# been removed Warning: this creates an entirely new doLaterList.
|
|
|
oldLen = len(self.__doLaterList)
|
|
|
- self.__doLaterList = filter(lambda task: not task.isRemoved(), self.__doLaterList)
|
|
|
+ self.__doLaterList = filter(
|
|
|
+ lambda task: not task.isRemoved(), self.__doLaterList)
|
|
|
# Re heapify to maintain ordering after filter
|
|
|
heapify(self.__doLaterList)
|
|
|
newLen = len(self.__doLaterList)
|
|
|
@@ -404,8 +407,8 @@ class TaskManager:
|
|
|
# is not ready to go, we can return
|
|
|
break
|
|
|
else:
|
|
|
- # Take it off the doLaterList, set its time, and make it pending
|
|
|
-
|
|
|
+ # Take it off the doLaterList, set its time, and make
|
|
|
+ # it pending
|
|
|
heappop(self.__doLaterList)
|
|
|
dl.setStartTimeFrame(self.currentTime, self.currentFrame)
|
|
|
self.__addPendingTask(dl)
|
|
|
@@ -414,24 +417,27 @@ class TaskManager:
|
|
|
# This is basically a mark and sweep garbage collection of doLaters
|
|
|
if ((task.frame % self.doLaterCleanupCounter) == 0):
|
|
|
numRemoved = self.__doLaterFilter()
|
|
|
- # TaskManager.notify.debug("filtered %s removed doLaters" % numRemoved)
|
|
|
+ # TaskManager.notify.debug(
|
|
|
+ # "filtered %s removed doLaters" % numRemoved)
|
|
|
return cont
|
|
|
|
|
|
- def doMethodLater(self, delayTime, funcOrTask, name, extraArgs=None, priority=0, uponDeath=None, appendTask=False):
|
|
|
+ def doMethodLater(self, delayTime, funcOrTask, name, extraArgs=None,
|
|
|
+ priority=0, uponDeath=None, appendTask=False):
|
|
|
if isinstance(funcOrTask, Task):
|
|
|
task = funcOrTask
|
|
|
elif callable(funcOrTask):
|
|
|
task = Task(funcOrTask, priority)
|
|
|
else:
|
|
|
- self.notify.error('add: Tried to add a task that was not a Task or a func')
|
|
|
+ self.notify.error(
|
|
|
+ 'add: Tried to add a task that was not a Task or a func')
|
|
|
task.setPriority(priority)
|
|
|
task.name = name
|
|
|
task.extraArgs = extraArgs
|
|
|
if uponDeath:
|
|
|
task.uponDeath = uponDeath
|
|
|
|
|
|
- # if told to, append the task object to the extra args list so the method
|
|
|
- # called will be able to access any properties on the task
|
|
|
+ # if told to, append the task object to the extra args list so the
|
|
|
+ # method called will be able to access any properties on the task
|
|
|
if (appendTask == True and extraArgs != None):
|
|
|
extraArgs.append(task)
|
|
|
|
|
|
@@ -468,7 +474,8 @@ class TaskManager:
|
|
|
elif callable(funcOrTask):
|
|
|
task = Task(funcOrTask, priority)
|
|
|
else:
|
|
|
- self.notify.error('add: Tried to add a task that was not a Task or a func')
|
|
|
+ self.notify.error(
|
|
|
+ 'add: Tried to add a task that was not a Task or a func')
|
|
|
task.setPriority(priority)
|
|
|
task.name = name
|
|
|
task.extraArgs = extraArgs
|
|
|
@@ -543,7 +550,8 @@ class TaskManager:
|
|
|
task.setupPStats(name)
|
|
|
if self.fVerbose:
|
|
|
# Alert the world, a new task is born!
|
|
|
- messenger.send('TaskManager-spawnTask', sentArgs = [task, task.name, index])
|
|
|
+ messenger.send(
|
|
|
+ 'TaskManager-spawnTask', sentArgs = [task, task.name, index])
|
|
|
return task
|
|
|
|
|
|
def remove(self, taskOrName):
|
|
|
@@ -562,7 +570,9 @@ class TaskManager:
|
|
|
"""
|
|
|
# TaskManager.notify.debug('removing tasks matching: ' + taskPattern)
|
|
|
num = 0
|
|
|
- keyList = filter(lambda key: fnmatch.fnmatchcase(key, taskPattern), self.nameDict.keys())
|
|
|
+ keyList = filter(
|
|
|
+ lambda key: fnmatch.fnmatchcase(key, taskPattern),
|
|
|
+ self.nameDict.keys())
|
|
|
for key in keyList:
|
|
|
num += self.__removeTasksNamed(key)
|
|
|
return num
|
|
|
@@ -570,7 +580,8 @@ class TaskManager:
|
|
|
def __removeTasksEqual(self, task):
|
|
|
# Remove this task from the nameDict (should be a short list)
|
|
|
if self.__removeTaskFromNameDict(task):
|
|
|
- # TaskManager.notify.debug('__removeTasksEqual: removing task: %s' % (task))
|
|
|
+ # TaskManager.notify.debug(
|
|
|
+ # '__removeTasksEqual: removing task: %s' % (task))
|
|
|
# Flag the task for removal from the real list
|
|
|
task.remove()
|
|
|
task.finishTask(self.fVerbose)
|
|
|
@@ -582,7 +593,8 @@ class TaskManager:
|
|
|
tasks = self.nameDict.get(taskName)
|
|
|
if not tasks:
|
|
|
return 0
|
|
|
- # TaskManager.notify.debug('__removeTasksNamed: removing tasks named: %s' % (taskName))
|
|
|
+ # TaskManager.notify.debug(
|
|
|
+ # '__removeTasksNamed: removing tasks named: %s' % (taskName))
|
|
|
for task in tasks:
|
|
|
# Flag for removal
|
|
|
task.remove()
|
|
|
@@ -675,7 +687,8 @@ class TaskManager:
|
|
|
break
|
|
|
# See if this task has been removed in show code
|
|
|
if task.isRemoved():
|
|
|
- # assert TaskManager.notify.debug('__stepThroughList: task is flagged for removal %s' % (task))
|
|
|
+ # assert TaskManager.notify.debug(
|
|
|
+ # '__stepThroughList: task is flagged for removal %s' % (task))
|
|
|
# If it was removed in show code, it will need finishTask run
|
|
|
# If it was removed by the taskMgr, it will not, but that is ok
|
|
|
# because finishTask is safe to call twice
|
|
|
@@ -695,17 +708,20 @@ class TaskManager:
|
|
|
taskPriList.remove(i)
|
|
|
continue
|
|
|
elif ((ret == done) or (ret == exit) or (ret == None)):
|
|
|
- # assert TaskManager.notify.debug('__stepThroughList: task is finished %s' % (task))
|
|
|
+ # assert TaskManager.notify.debug(
|
|
|
+ # '__stepThroughList: task is finished %s' % (task))
|
|
|
# Remove the task
|
|
|
if not task.isRemoved():
|
|
|
- # assert TaskManager.notify.debug('__stepThroughList: task not removed %s' % (task))
|
|
|
+ # assert TaskManager.notify.debug(
|
|
|
+ # '__stepThroughList: task not removed %s' % (task))
|
|
|
task.remove()
|
|
|
- # Note: Should not need to remove from doLaterList here because
|
|
|
- # this task is not in the doLaterList
|
|
|
+ # Note: Should not need to remove from doLaterList here
|
|
|
+ # because this task is not in the doLaterList
|
|
|
task.finishTask(self.fVerbose)
|
|
|
self.__removeTaskFromNameDict(task)
|
|
|
else:
|
|
|
- # assert TaskManager.notify.debug('__stepThroughList: task already removed %s' % (task))
|
|
|
+ # assert TaskManager.notify.debug(
|
|
|
+ # '__stepThroughList: task already removed %s' % (task))
|
|
|
self.__removeTaskFromNameDict(task)
|
|
|
taskPriList.remove(i)
|
|
|
# Do not increment the iterator
|
|
|
@@ -716,12 +732,14 @@ class TaskManager:
|
|
|
i += 1
|
|
|
|
|
|
def __addPendingTasksToTaskList(self):
|
|
|
- # Now that we are all done, add any left over pendingTasks generated in
|
|
|
- # priority levels lower or higher than where we were when we iterated
|
|
|
+ # Now that we are all done, add any left over pendingTasks
|
|
|
+ # generated in priority levels lower or higher than where
|
|
|
+ # we were when we iterated
|
|
|
for taskList in self.pendingTaskDict.values():
|
|
|
for task in taskList:
|
|
|
if (task and not task.isRemoved()):
|
|
|
- # assert TaskManager.notify.debug('step: moving %s from pending to taskList' % (task.name))
|
|
|
+ # assert TaskManager.notify.debug(
|
|
|
+ # 'step: moving %s from pending to taskList' % (task.name))
|
|
|
self.__addNewTask(task)
|
|
|
self.pendingTaskDict.clear()
|
|
|
|