用Pytho实现了一个Kahn Process Network:

思路:

用Python的list模拟queue。

每个channel一个queue

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

channel的queue设置为全局变量

代码实现:

  1. h1f=[];fg=[];gh1=[];gh0=[];h0f=[]
  2. fgLog = []
  3.  
  4. h1FirstRun = True
  5. h0FirstRun = True
  6.  
  7. fLastChoose = 0
  8. gLastChoose = 0
  9.  
  10. def h1():
  11. global h1FirstRun
  12. if h1FirstRun:
  13. h1FirstRun = False
  14. global h1f
  15. h1f.append(1)
  16. else:
  17. global gh1
  18. if len(gh1) != 0:
  19. value = gh1.pop(0)
  20. global h1f
  21. h1f.append(value)
  22.  
  23. def h0():
  24. global h0FirstRun
  25. if h0FirstRun:
  26. h0FirstRun = False
  27. global h0f
  28. h0f.append(0)
  29. else:
  30. global gh0
  31. if len(gh0) != 0:
  32. value = gh0.pop(0)
  33. global h0f
  34. h0f.append(value)
  35.  
  36. def f():
  37. global fLastChoose
  38. if fLastChoose == 0:
  39. global h1f
  40. if len(h1f) != 0:
  41. value = h1f.pop(0)
  42. global fg
  43. global fgLog
  44. fg.append(value)
  45. fgLog.append(value)
  46. fLastChoose = 1
  47. else:
  48. global h0f
  49. if len(h0f) != 0:
  50. value = h0f.pop(0)
  51. global fg
  52. global fgLog
  53. fg.append(value)
  54. fgLog.append(value)
  55. fLastChoose = 0
  56. def g():
  57. global fg
  58. if len(fg) != 0:
  59. global gLastChoose
  60. value = fg.pop(0)
  61. if gLastChoose == 0:
  62. global gh1
  63. gh1.append(value)
  64. gLastChoose = 1
  65. else:
  66. global gh0
  67. gh0.append(value)
  68. gLastChoose = 0
  69.  
  70. if __name__ == '__main__':
  71. runOrder = 'order3'
  72. print runOrder
  73. if runOrder == 'order1':
  74. for i in range(50):
  75. h1();h0();f();g()
  76. elif runOrder == 'order2':
  77. for i in range(50):
  78. h1();h1();h1();g();f();h0();h0();
  79. elif runOrder == 'order3':
  80. for i in range(50):
  81. f();f();g();h1();h0();h1();h0();h0();g()
  82. 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. 网络初级篇之网络设备的FTP(原理与实验)

    一.什么是FTP    FTP就是文件传输协议.用于互联网双向传输.二.FTP的作用    控制文件下载空间在服务器复制文件从本地计算机或本地上传文件复制到服务器上的空间,主要的作用就是文件的传输,保 ...

  2. Arch Linux 安装rust

    Arch Linux 安装rust 0. 参考 Rust Toolchain 反向代理使用帮助 1. 安装 安装rustup和toolchain yaourt -S rustup rustup ins ...

  3. openstack Rocky系列之keystone:(二)keystone中API注册

    主要说一下initialize_application中的application_factory def loadapp(): app = application.application_factor ...

  4. springboot中使用servlet通过配置类

    在servlet目录下创建个servlet类,示例代码如下: package com.bjpowernode.springboot.servlet; import javax.servlet.Serv ...

  5. trigger添加及表达式

    创建触发器 点击Configuration(配置) → Hosts(主机) 点击hosts(主机)相关行的trigger 点击右上角的创建触发器(create trigger) name : 触发器名 ...

  6. 认识配置文件schema.xml(managed-schema)

    1.schema文件是在SolrConfig中的架构工厂定义,有两种定义模式: 1.1.默认的托管模式: solr默认使用的就是托管模式.也就是当在solrconfig.xml文件中没有显式声明< ...

  7. 弹出框 popover.js

    弹出框 popover.js 为任意元素添加一小块浮层,就像 iPad 上一样,用于存放非主要信息. 弹出框的标题和内容的长度都是零的话将永远不会被显示出来. 插件依赖 弹出框依赖 工具提示插件 ,因 ...

  8. Rest_Framework简介

    Web应用模式 在开发Web应用中,有两种应用模式:前后端不分离和前后端分离 前后端不分离 前后端不分离通俗来讲就是不区分前端和后端,浏览器请求时服务器直接返回页面,其示意图如下 前后端分离 前后端分 ...

  9. 43 java中的异常处理机制的简单原理和应用

  10. SQL SERVER 2008 设置字段默认值为当前时间

    在某些情况下需要对某条记录添加上时间戳,比如用户注册,需要记录用户的注册时间,在SQL SERVER 2008中可以通过 1. 添加新字段 2. 数据类型设置为smalldatetime 3. 默认值 ...