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参考使用. ...
随机推荐
- 网络初级篇之网络设备的FTP(原理与实验)
一.什么是FTP FTP就是文件传输协议.用于互联网双向传输.二.FTP的作用 控制文件下载空间在服务器复制文件从本地计算机或本地上传文件复制到服务器上的空间,主要的作用就是文件的传输,保 ...
- Arch Linux 安装rust
Arch Linux 安装rust 0. 参考 Rust Toolchain 反向代理使用帮助 1. 安装 安装rustup和toolchain yaourt -S rustup rustup ins ...
- openstack Rocky系列之keystone:(二)keystone中API注册
主要说一下initialize_application中的application_factory def loadapp(): app = application.application_factor ...
- springboot中使用servlet通过配置类
在servlet目录下创建个servlet类,示例代码如下: package com.bjpowernode.springboot.servlet; import javax.servlet.Serv ...
- trigger添加及表达式
创建触发器 点击Configuration(配置) → Hosts(主机) 点击hosts(主机)相关行的trigger 点击右上角的创建触发器(create trigger) name : 触发器名 ...
- 认识配置文件schema.xml(managed-schema)
1.schema文件是在SolrConfig中的架构工厂定义,有两种定义模式: 1.1.默认的托管模式: solr默认使用的就是托管模式.也就是当在solrconfig.xml文件中没有显式声明< ...
- 弹出框 popover.js
弹出框 popover.js 为任意元素添加一小块浮层,就像 iPad 上一样,用于存放非主要信息. 弹出框的标题和内容的长度都是零的话将永远不会被显示出来. 插件依赖 弹出框依赖 工具提示插件 ,因 ...
- Rest_Framework简介
Web应用模式 在开发Web应用中,有两种应用模式:前后端不分离和前后端分离 前后端不分离 前后端不分离通俗来讲就是不区分前端和后端,浏览器请求时服务器直接返回页面,其示意图如下 前后端分离 前后端分 ...
- 43 java中的异常处理机制的简单原理和应用
- SQL SERVER 2008 设置字段默认值为当前时间
在某些情况下需要对某条记录添加上时间戳,比如用户注册,需要记录用户的注册时间,在SQL SERVER 2008中可以通过 1. 添加新字段 2. 数据类型设置为smalldatetime 3. 默认值 ...