使用Asyncio的Coroutine来实现一个有限状态机
如图:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import asyncio
import datetime
import time
from random import randint
@asyncio.coroutine
def StartState():
print("Start State called \n")
input_value = randint(0, 1)
time.sleep(1)
if (input_value == 0):
result = yield from State2(input_value)
else:
result = yield from State1(input_value)
print("Resume of the Transition: \nStart State calling " \
+ result)
@asyncio.coroutine
def State1(transition_value):
outputValue = str(("State 1 with transition value = %s \n" \
%(transition_value)))
input_value = randint(0, 1)
time.sleep(1)
print("...Evaluating....")
if (input_value == 0):
result = yield from State3(input_value)
else:
result = yield from State2(input_value)
result = "State 1 calling " + result
return (outputValue + str(result))
@asyncio.coroutine
def State2(transition_value):
outputValue = str(("State 2 with transition value = %s \n" \
%(transition_value)))
input_value = randint(0, 1)
time.sleep(1)
print("...Evaluating....")
if (input_value == 0):
result = yield from State1(input_value)
else:
result = yield from State3(input_value)
result = "State 2 calling " + result
return (outputValue + str(result))
@asyncio.coroutine
def State3(transition_value):
outputValue = str(("State 3 with transition value = %s \n" \
%(transition_value)))
input_value = randint(0, 1)
time.sleep(1)
print("...Evaluating....")
if (input_value == 0):
result = yield from State1(input_value)
else:
result = yield from EndState(input_value)
result = "State 2 calling " + result
return (outputValue + str(result))
@asyncio.coroutine
def EndState(transition_value):
outputValue = str(("End State with transition value = %s \n" \
%(transition_value)))
print("...Stop Computation...")
return (outputValue)
if __name__ == "__main__":
print("Finite State Machine simulation With Asyncio Coroutine")
loop = asyncio.get_event_loop()
loop.run_until_complete(StartState())

使用Asyncio的Coroutine来实现一个有限状态机的更多相关文章
- 一个有趣的小例子,带你入门协程模块-asyncio
一个有趣的小例子,带你入门协程模块-asyncio 上篇文章写了关于yield from的用法,简单的了解异步模式,[https://www.cnblogs.com/c-x-a/p/10106031. ...
- Python高级编程之生成器(Generator)与coroutine(四):一个简单的多任务系统
啊,终于要把这一个系列写完整了,好高兴啊 在前面的三篇文章中介绍了Python的Python的Generator和coroutine(协程)相关的编程技术,接下来这篇文章会用Python的corout ...
- python:Asyncio模块处理“事件循环”中的异步进程和并发执行任务
python模块Asynico提供了管理事件.携程.任务和线程的功能已经编写并发代码的同步原语. 组成模块: 事件循,Asyncio 每个进程都有一个事件循环. 协程,子例程概念的泛化,可以暂停任务, ...
- Python标准模块--asyncio
1 模块简介 asyncio模块作为一个临时的库,在Python 3.4版本中加入.这意味着,asyncio模块可能做不到向后兼容甚至在后续的Python版本中被删除.根据Python官方文档,asy ...
- 【Unity3D基础教程】给初学者看的Unity教程(五):详解Unity3D中的协程(Coroutine)
作者:王选易,出处:http://www.cnblogs.com/neverdie/ 欢迎转载,也请保留这段声明.如果你喜欢这篇文章,请点[推荐].谢谢! 为什么需要协程 在游戏中有许多过程(Proc ...
- python asyncio笔记
1.什么是coroutine coroutine,最早我是在lua里面看到的,coroutine最大的好处是可以保存堆栈,让程序得以继续执行,在python里面,一般是利用yield来实现,具体可以看 ...
- 【译】深入理解python3.4中Asyncio库与Node.js的异步IO机制
转载自http://xidui.github.io/2015/10/29/%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3python3-4-Asyncio%E5%BA%93% ...
- Coroutine,你究竟干了什么?
一 引子 使用Unity已经有一段时间了,对于Component.GameObject之类的概念也算是有所了解,而脚本方面从一开始就选定了C#,目前来看还是挺明智的:Boo太小众,而且支持有限:JS( ...
- asyncio
一.简介 asyncio是Python 3.4版本引入的标准库,直接内置了对异步IO的支持. asyncio的编程模型就是一个消息循环.我们从asyncio模块中直接获取一个EventLoop的引用, ...
随机推荐
- OpenGL官方教程——着色器语言概述
OpenGL官方教程——着色器语言概述 OpenGL官方教程——着色器语言概述 可编程图形硬件管线(流水线) 可编程顶点处理器 可编程几何处理器 可编程片元处理器 语言 可编程图形硬件管线(流水线) ...
- 1.2---翻转字符串(CC150)
import java.util.*; public class Reverse { public String reverseString(String iniString) { // write ...
- python——有限状态机
前言 使用Python,大部分时间花在了处理文本上.在处理文本的时候,如果对有限状态机有所了解的话,处理起来会更加得心应手.可以把文本看成一个流,然后有一个机器对这个流进行操作.这个机器有状态,不同的 ...
- poj 2524 (并查集)
http://poj.org/problem?id=2524 题意:在一所学校里面的人,都有宗教信仰,不过他们的宗教信仰有可能相同有可能不同,但你又不能直接去问他们,但你可以问他们和谁是同一个宗教.通 ...
- poj1177
题意:在平面直角坐标系内给出一些与坐标轴平行的矩形,将这些矩形覆盖的区域求并集,然后问这个区域的周长是多少.(边与边重合的地方不计入周长) 分析:线段树.曾经做过类似的求矩形覆盖的总面积的题.这道题同 ...
- ansible中tag的用法
Tags 根据官方文档介绍: ansible允许通过自定义的关键字来给playbook中的资源打上标签,然后只运行标签标记的那个task任务. 例如,可能有个完成的OS配置,然后特定的步骤标记为“nt ...
- ZPF MYSQL数据库链接层
2015年3月31日 18:27:34 最后编辑: 2016年4月17日 00:22:00 星期日 读写分离: 根据最终的sql语句来判断是读还是写 (随后会考察并加上一致性哈希) 链式调用: 参看 ...
- OPCServer Modbus使用和配置
一,安装KEPware.Enhanced.OPC.DDE.KEPServer.(PLC数据传送给KEPServer,开发的程序用OPCServer读KEPServer) 设置ip地址后面是指的plc站 ...
- MongoDB 分片的原理、搭建、应用
一.概念: 分片(sharding)是指将数据库拆分,将其分散在不同的机器上的过程.将数据分散到不同的机器上,不需要功能强大的服务器就可以存储更多的数据和处理更大的负载.基本思想就是将集合切成小块,这 ...
- 项目管理工具~SVN
SVN 定期更新:每周五,周一早上 目录完备: 需求文档 设计文档 数据字典 测试报告 代码备份 周报月报 ...