KahnProcessNetwork的Python实现
用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实现的更多相关文章
- Python中的多进程与多线程(一)
一.背景 最近在Azkaban的测试工作中,需要在测试环境下模拟线上的调度场景进行稳定性测试.故而重操python旧业,通过python编写脚本来构造类似线上的调度场景.在脚本编写过程中,碰到这样一个 ...
- Python高手之路【六】python基础之字符串格式化
Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...
- Python 小而美的函数
python提供了一些有趣且实用的函数,如any all zip,这些函数能够大幅简化我们得代码,可以更优雅的处理可迭代的对象,同时使用的时候也得注意一些情况 any any(iterable) ...
- JavaScript之父Brendan Eich,Clojure 创建者Rich Hickey,Python创建者Van Rossum等编程大牛对程序员的职业建议
软件开发是现时很火的职业.据美国劳动局发布的一项统计数据显示,从2014年至2024年,美国就业市场对开发人员的需求量将增长17%,而这个增长率比起所有职业的平均需求量高出了7%.很多人年轻人会选择编 ...
- 可爱的豆子——使用Beans思想让Python代码更易维护
title: 可爱的豆子--使用Beans思想让Python代码更易维护 toc: false comments: true date: 2016-06-19 21:43:33 tags: [Pyth ...
- 使用Python保存屏幕截图(不使用PIL)
起因 在极客学院讲授<使用Python编写远程控制程序>的课程中,涉及到查看被控制电脑屏幕截图的功能. 如果使用PIL,这个需求只需要三行代码: from PIL import Image ...
- Python编码记录
字节流和字符串 当使用Python定义一个字符串时,实际会存储一个字节串: "abc"--[97][98][99] python2.x默认会把所有的字符串当做ASCII码来对待,但 ...
- Apache执行Python脚本
由于经常需要到服务器上执行些命令,有些命令懒得敲,就准备写点脚本直接浏览器调用就好了,比如这样: 因为线上有现成的Apache,就直接放它里面了,当然访问安全要设置,我似乎别的随笔里写了安全问题,这里 ...
- python开发编译器
引言 最近刚刚用python写完了一个解析protobuf文件的简单编译器,深感ply实现词法分析和语法分析的简洁方便.乘着余热未过,头脑清醒,记下一点总结和心得,方便各位pythoner参考使用. ...
随机推荐
- tensorflow源码分析
前言: 一般来说,如果安装tensorflow主要目的是为了调试些小程序的话,只要下载相应的包,然后,直接使用pip install tensorflow即可. 但有时我们需要将Tensorflow的 ...
- 架构师成长之路5.5-Saltstack配置管理(状态间关系)
点击架构师成长之路 架构师成长之路5.5-Saltstack配置管理(状态间关系) 配置管理工具: Pupper:1. 采用ruby编程语言:2. 安装环境相对较复杂:3.不支持远程执行,需要FUNC ...
- Charles中使用Rewrite提高测试效率
上次给大家演示了Charles中通过Map Local功能来提高测试效率,Charles还有另外一个强大的功能,Rewrite,这次也给大家演示一下. Charles中的Rewrite功能非常强大,可 ...
- dead relu and Tensorboard
https://medium.com/analytics-vidhya/is-relu-dead-27943b50102 1.使用relu作为激活函数时,因其在输入小于0时,输出为0,所以可能会造成d ...
- 设置ecShop网店用户名和email均可登录
修改user.php文件,如果您网站的该文件修改过,按照下面的修改说明修改文件. 查找代码:elseif ($action == 'act_login') 在:$back_act = isset($_ ...
- 第四章 生命周期函数--36 结合Node手写JSONP服务器剖析JSONP原理
- 网站实现https访问
https协议 是一种通过计算机网络进行安全通信的传输协议.HTTPS经由HTTP进行通信,但利用SSL/TLS来加密数据包.HTTPS开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私 ...
- Ubuntu安装opencv 为调用gpu模块
也真够折腾的. 事件背景:为了一个光流的提取处理,本来是3.1的opencv在include一些模块上出错,原因是opencv3.0以上的版本对模块进行了再分离,要contribute,但是contr ...
- Spring Boot 和 Spring Cloud Feign调用服务及传递参数踩坑记录(转)
https://blog.csdn.net/uotail/article/details/84673347
- JDK 7升8 maven 编译报错
在JDK由版本7升级到8时,使用maven编译会报doc错误,原因是JAVA8不支持JAVA7编写的doc,报错信息如下: @param name 未找到 @return 的用法无效 可以使添加配置- ...