python协程是个不错的东东,如果计算拓扑中有环的话可以通过消息缓冲实现。
from collections import deque
class delegate:
'''协程函数代理,有代理后协程间的关系允许有环'''
def __init__(self,func):
'''初始化,func为协程函数,将创建消息缓冲队列'''
self.msgbuf = deque()
self.func = func
def __call__(self,*args,**kwargs):
'''启动协程'''
self.funcgen = self.func(*args,**kwargs)
return self.funcgen
def send(self,msg):
'''对协程send消息的代理函数'''
try:
#先发送队列中的消息,之后发送新消息
while len(self.msgbuf) > 0:
self.funcgen.send(self.msgbuf[0])
self.msgbuf.popleft()
self.funcgen.send(msg)
except ValueError:
#发送失败则将新消息加入队列
self.msgbuf.append(msg)
except StopIteration:
self.stop()
def stop(self):