1 Star 0 Fork 0

ljn / nssas

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
scheduler.py 2.49 KB
一键复制 编辑 原始数据 按行查看 历史
ljn 提交于 2017-09-21 16:24 . no message
from Queue import Queue
import copy
class Task():
def __init__(self, taskid, coroutine):
self.__taskId = taskid
self.__coroutine = coroutine
self.__sendValue = ''
self.__beforeFirstYield = True
self.isFinished = False
def getTaskId(self):
return self.__taskId
def setYield(self):
self.__beforeFirstYield = False
def setValue(self, value):
self.__sendValue = value
def run(self):
if (self.__beforeFirstYield):
self.__beforeFirstYield = False
return self.__coroutine.next()
else:
try:
retval = self.__coroutine.send(self.__sendValue)
return retval
except StopIteration:
self.isFinished = True
return ""
class Scheduler():
def __init__(self):
self.taskQueue = Queue()
self.maxTaskId = 0
self.taskMap = dict()
def scheduler(self, task):
self.taskQueue.put(task)
def KillTask(self, taskid):
if not taskid in self.taskMap:
return False
i = 0
while i < self.taskQueue.qsize():
tmp = self.taskQueue.get()
if tmp == self.taskMap[taskid]:
del self.taskMap[taskid]
break
else:
self.scheduler(tmp)
i += 1
return True
def copy(self, pid):
if not pid in self.taskMap:
return False
newtask = copy.deepcopy(self.taskMap[pid])
newtaskid = self.maxTaskId + 1
self.taskMap[newtaskid] = newtask
self.scheduler(newtask)
return newtask
def newTask(self, coroutine):
self.maxTaskId += 1
task = Task(self.maxTaskId, coroutine)
self.taskMap[self.maxTaskId] = task
self.scheduler(task)
return self.maxTaskId
def run(self):
while not self.taskQueue.empty():
task = self.taskQueue.get()
retval = task.run()
if task.isFinished:
tid = task.getTaskId()
del self.taskMap[tid]
else:
self.scheduler(task)
'''
def task1():
i = 0
while i < 10:
print "This is task 1 i is %s" % i
i += 1
yield
def task2():
i = 0
while i < 10:
print "This is task 2 i is %s" % i
i += 1
yield
schedular = Scheduler()
schedular.newTask(task1())
schedular.newTask(task2())
schedular.run()
'''
Python
1
https://gitee.com/liujunnan123/nssas.git
git@gitee.com:liujunnan123/nssas.git
liujunnan123
nssas
nssas
master

搜索帮助

53164aa7 5694891 3bd8fe86 5694891