用Pytho实现了一个Kahn Process Network:

思路:

用Python的list模拟queue。

每个channel一个queue

用一个list (fgLog)来记录所有push到fg channel的值用于最后的显示

channel的queue设置为全局变量

代码实现:

h1f=[];fg=[];gh1=[];gh0=[];h0f=[]
fgLog = [] h1FirstRun = True
h0FirstRun = True fLastChoose = 0
gLastChoose = 0 def h1():
global h1FirstRun
if h1FirstRun:
h1FirstRun = False
global h1f
h1f.append(1)
else:
global gh1
if len(gh1) != 0:
value = gh1.pop(0)
global h1f
h1f.append(value) def h0():
global h0FirstRun
if h0FirstRun:
h0FirstRun = False
global h0f
h0f.append(0)
else:
global gh0
if len(gh0) != 0:
value = gh0.pop(0)
global h0f
h0f.append(value) def f():
global fLastChoose
if fLastChoose == 0:
global h1f
if len(h1f) != 0:
value = h1f.pop(0)
global fg
global fgLog
fg.append(value)
fgLog.append(value)
fLastChoose = 1
else:
global h0f
if len(h0f) != 0:
value = h0f.pop(0)
global fg
global fgLog
fg.append(value)
fgLog.append(value)
fLastChoose = 0
def g():
global fg
if len(fg) != 0:
global gLastChoose
value = fg.pop(0)
if gLastChoose == 0:
global gh1
gh1.append(value)
gLastChoose = 1
else:
global gh0
gh0.append(value)
gLastChoose = 0 if __name__ == '__main__':
runOrder = 'order3'
print runOrder
if runOrder == 'order1':
for i in range(50):
h1();h0();f();g()
elif runOrder == 'order2':
for i in range(50):
h1();h1();h1();g();f();h0();h0();
elif runOrder == 'order3':
for i in range(50):
f();f();g();h1();h0();h1();h0();h0();g()
print fgLog

KahnProcessNetwork的Python实现的更多相关文章

  1. Python中的多进程与多线程(一)

    一.背景 最近在Azkaban的测试工作中,需要在测试环境下模拟线上的调度场景进行稳定性测试.故而重操python旧业,通过python编写脚本来构造类似线上的调度场景.在脚本编写过程中,碰到这样一个 ...

  2. Python高手之路【六】python基础之字符串格式化

    Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...

  3. Python 小而美的函数

    python提供了一些有趣且实用的函数,如any all zip,这些函数能够大幅简化我们得代码,可以更优雅的处理可迭代的对象,同时使用的时候也得注意一些情况   any any(iterable) ...

  4. JavaScript之父Brendan Eich,Clojure 创建者Rich Hickey,Python创建者Van Rossum等编程大牛对程序员的职业建议

    软件开发是现时很火的职业.据美国劳动局发布的一项统计数据显示,从2014年至2024年,美国就业市场对开发人员的需求量将增长17%,而这个增长率比起所有职业的平均需求量高出了7%.很多人年轻人会选择编 ...

  5. 可爱的豆子——使用Beans思想让Python代码更易维护

    title: 可爱的豆子--使用Beans思想让Python代码更易维护 toc: false comments: true date: 2016-06-19 21:43:33 tags: [Pyth ...

  6. 使用Python保存屏幕截图(不使用PIL)

    起因 在极客学院讲授<使用Python编写远程控制程序>的课程中,涉及到查看被控制电脑屏幕截图的功能. 如果使用PIL,这个需求只需要三行代码: from PIL import Image ...

  7. Python编码记录

    字节流和字符串 当使用Python定义一个字符串时,实际会存储一个字节串: "abc"--[97][98][99] python2.x默认会把所有的字符串当做ASCII码来对待,但 ...

  8. Apache执行Python脚本

    由于经常需要到服务器上执行些命令,有些命令懒得敲,就准备写点脚本直接浏览器调用就好了,比如这样: 因为线上有现成的Apache,就直接放它里面了,当然访问安全要设置,我似乎别的随笔里写了安全问题,这里 ...

  9. python开发编译器

    引言 最近刚刚用python写完了一个解析protobuf文件的简单编译器,深感ply实现词法分析和语法分析的简洁方便.乘着余热未过,头脑清醒,记下一点总结和心得,方便各位pythoner参考使用. ...

随机推荐

  1. Linux配置iSCSI存储

    1.基础知识 1.1 存储相关     直接存储(DAS):例如本机上的磁盘,就是属于直接存储设备.     存储区域网络(SAN):来自网络内的其他存储设备提供的磁盘.Iscsi就是属于该方式.   ...

  2. cgicc使用

    CgiCc 使用 一.下载 下载地址: http://ftp.gnu.org/gnu/cgicc/ ftp://ftp.gnu.org/gnu/cgicc/ 二.配置.编译.安装 下载完成后解压:sh ...

  3. Java 5,6,7,8,9,10,11新特性

    转自https://it18monkey.github.io java5 泛型 (Generics) List<Integer> list=new ArrayList<Integer ...

  4. shell中的控制流结构

    shell中的控制流结构 1.if...then..else..fi语句 2.case语句 3.for循环 4.until 语句 5.while循环 6.break控制 7.continue 控制 1 ...

  5. Acwing-278-数字组合(背包)

    链接: https://www.acwing.com/problem/content/280/ 题意: 给定N个正整数A1,A2,-,AN,从中选出若干个数,使它们的和为M,求有多少种选择方案. 思路 ...

  6. Phaserjs怎样用ES6开发游戏

    想用ES6语法开发phaserjs游戏,是phaserCE,但是不知道怎么导入,总是报错,后来经过多次尝试,解决方法如下: 干脆不导入,直接暴露到window里,然后模块化的代码全部在window.o ...

  7. 表空间及段区块的一些sql语句和视图

    查询段情况的语句 select segment_name,blocks,extents,bytes,segment_type,tablespace_namefrom dba_segments wher ...

  8. json的值键对,对象,数组,逻辑值

    详细说一下有关json的相关知识: ㈠json与xml的异同 ★与 XML 相同之处 ⑴JSON 是纯文本 ⑵JSON 具有"自我描述性"(人类可读) ⑶JSON 具有层级结构(值 ...

  9. docker部署jar工程

    1.把要部署的功能打成jar 工程目录结构 pom文件 <?xml version="1.0" encoding="UTF-8"?> <pro ...

  10. 洛谷P1576 最小花费x

    题目背景 题目描述 在n个人中,某些人的银行账号之间可以互相转账.这些人之间转账的手续费各不相同.给定这些人之间转账时需要从转账金额里扣除百分之几的手续费,请问A最少需要多少钱使得转账后B收到100元 ...