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参考使用. ...
随机推荐
- 全年DDoS攻击分析|知道创宇云安全2018年度网络安全态势报告
*本报告由知道创宇云安全出品* 数据来源:知道创宇云防御平台 前言 2018年,网络安全领域暗流涌动,攻击趋势不断攀升,T级DDoS攻击多次爆发.数据泄露事件层出不穷.勒索软件大行其道.此外,随着我国 ...
- 网络初级篇之STP(概念原理)
一.什么是STP 生成树协议(Spanning Tree Protocol,STP),是一种工作在OSI网络模型中的第二层(数据链路层)的通信协议,基本应用是防止交换机冗余链路产生的环路.用于确保以太 ...
- 一、PHP和Apache实现多用户自助建站
一.环境搭建准备
- Mac OSX编译安装php7.1.8
laravel中用到ldap认证包,要求php7.0以上版本,而且安装Mews\Captcha包的时候 验证码无法显示 报错如下: Call to undefined function Interve ...
- 【2019.3.20】NOI模拟赛
题目 这里必须标记一下那个傻逼问题,再不解决我人就没了! 先放一个 $T3$ $20$ 分暴力 #include<bits/stdc++.h> #define rep(i,x,y) for ...
- 高性能mysql 第11章 可扩展的mysql
可扩展性的定义:当增加资源以获得执行更多的工作系统能获得划算的同等提升. 向上扩展(垂直扩展):提升服务器的硬件性能. 向外扩展(水平扩展):一般都是复制,拆分,数据分片(sharding). 复制: ...
- 【洛谷P4552】IncDec Sequence
题目大意:给定一个长度为 N 的序列,现可以进行若干次区间 +1 或区间 -1 操作,求使得序列所有的值均相同的最小操作数是多少,且最终得到的序列有多少种. 题解: 首先考虑执行区间+和区间-操作,可 ...
- C#制作的屏幕取色器
1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System ...
- .NET Compiler Platform,一个.NET编译平台
.NET Compiler Platform,一个.NET编译平台 如何利用C# Roslyn编译器写一个简单的代码提示/错误检查? OK, 废话不多说,这些天在写C#代码时突然对于IDE提示有了 ...
- JAVA》eclipse——(二)Tomcat
一.进入www.apache.org网页(注:图中所有箭头都依据从左到右,从上到下的规则) 二.向下拉网页,然后如下图操作 三.进入之后,在网页的左边选择想要的Tomcat版本 四.选择与本机相同系统 ...