python模拟进程状态
python模拟进程状态
我在参考资料中看到了两种实现方式,都做了尝试
代码1
from transitions import Machine
class Matter:
pass
model = Matter()
states = ['New','Ready','Waiting','Running','Terminated']
transitions = [
{'trigger':'Admitted','source':'New','dest':'Ready'},
{'trigger':'Dispath','source':'Ready','dest':'Running'},
{'trigger':'Interrupt','source':'Running','dest':'Ready'},
{'trigger':'Exit','source':'Running','dest':'Terminated'},
{'trigger':'Input/Output or event wait','source':'Running','dest':'Waiting'},
{'trigger':'Input/Output or event completion','source':'Waiting','dest':'Ready'},
]
machine = Machine(model = model, states = states, transitions = transitions, initial = 'New')
print(model.state)
model.Admitted()
print(model.state)

代码2
from transitions import Machine
from collections import namedtuple
class FsmState:
def enter(self,event,fsm):
pass
def exit(self, fsm):
pass
class New(FsmState):
def enter(self,event,fsm):
print('New')
def exit(self,fsm):
print('Ready')
class Ready(FsmState):
def enter(self,event,fsm):
print('Ready')
def exit(self,event,fsm):
print('Running')
class Running(FsmState):
def enter(self,event,fsm):
print('Running')
def exit_1(self,fsm):
print('Ready')
def exit_2(self,fsm):
print('Waiting')
def exit_3(self,fsm):
print('Terminated')
class Waiting(FsmState):
def enter(self,evevt,fsm):
print('Waiting')
def exit(self,fsm):
print('Ready')
class FsmFinalState(FsmState):
def enter(self,event,fsm):
print('Terminated')
class FsmEvent:
pass
class Admitted(FsmEvent):
pass
class Dispatch(FsmEvent):
pass
class Interrupt(FsmEvent):
pass
class IO_EW(FsmEvent):
pass
class IO_EC(FsmEvent):
pass
class Exit(FsmEvent):
pass
Transaction = namedtuple('Transaction',['prev_state','event'])
class FSM:
def __init__(self,context):
self.context = context
self.state_transaction_table = []
self.global_transaction_table = []
self.current_state = None
self.working_state = FsmState
def add_global_transaction(self,event,end_state):
if not issubclass(end_state,FsmFinalState):
raise FsmException('The state should be FsmFinalState')
self.global_transaction_table.append(Transaction(self.working_state,end_state))
#
def add_transaction(self,prev_state, event, next_state):
if issubclass(prev_state, FsmFinalState):
raise FsmException("It's not allowed to add transaction after Final State Node")
self.state_transaction_table.append(Transaction(prev_state, event, next_state))
def process_event(self, event):
for transaction in self.global_transaction_table:
if isinstance(event, transaction.event):
self.current_state = transaction.next_state()
self.current_state.enter(event, self)
self.clear_transaction_table()
return
for transaction in self.state_transaction_table:
if isinstance(self.current_state, transaction.prev_state) and isinstance(event, transaction.event):
self.current_state.exit(self.context)
self.current_state = transaction.next_state()
self.current_state.enter(event, self)
if isinstance(self.current_state, FsmFinalState):
self.clear_transaction_table()
return
raise FsmException("Transaction not found")
def clear_transaction_table(self):
self.global_transaction_table = []
self.state_transaction_table = []
self.current_state = None
def run(self):
if len(self.state_transaction_table) == 0: return
self.current_state = self.state_transaction_table[0].prev_state()
self.current_state.enter(None, self)
def isRunning(self):
return self.current_state is not None
def next_state(self, event):
for transaction in self.global_transaction_table:
if isinstance(event, transaction.event):
return transaction.next_state
for transaction in self.state_transaction_table:
if isinstance(self.current_state, transaction.prev_state) and isinstance(event, transaction.event):
return transaction.next_state
return None
class FsmException(Exception):
def __init__(self, description):
super().__init__(description)
class ZTJ(FSM):
def __init__(self):
super().__init__(None)
ztj = ZTJ();
ztj.add_transaction(New, Admitted, Ready)
ztj.add_transaction(Ready, Dispatch, Running)
ztj.add_transaction(Running, Interrupt, Ready)
ztj.add_transaction(Running, IO_EW,Waiting)
ztj.add_transaction(Waiting, IO_EC, Ready)
ztj.add_transaction(Running, Exit, FsmFinalState)
ztj.run()
ztj.process_event(Admitted())
ztj.process_event(Dispatch())
ztj.process_event(Interrupt())
ztj.process_event(IO_EW())
ztj.process_event(IO_EC())
ztj.process_event(Exit())
程序报错

查找资料后找到一种错误原因

但是我在定义函数时已经添加了self参数,但是程序仍然报错,不知道该怎么解决
python模拟进程状态的更多相关文章
- Python模拟登陆新浪微博
上篇介绍了新浪微博的登陆过程,这节使用Python编写一个模拟登陆的程序.讲解与程序如下: 1.主函数(WeiboMain.py): import urllib2 import cookielib i ...
- 【Python数据分析】Python模拟登录(一) requests.Session应用
最近由于某些原因,需要用到Python模拟登录网站,但是以前对这块并不了解,而且目标网站的登录方法较为复杂, 所以一下卡在这里了,于是我决定从简单的模拟开始,逐渐深入地研究下这块. 注:本文仅为交流学 ...
- Python模拟C++输出流
看到一Python例子,挺有意思的,用Python模拟C++的输出流OStream.单纯只是玩. 原理: 利用Python __lshift__左移内建函数<<,调用时将输出内容,如果内容 ...
- 【py登陆】python模拟登录
用Python模拟登录网站 前面简单提到了 Python 模拟登录的程序,但是没写清楚,这里再补上一个带注释的 Python 模拟登录的示例程序.简单说一下流程:先用cookielib获取cookie ...
- 谈网页游戏外挂之用python模拟游戏(热血三国2)登陆
看web看多了,想写写页游的外挂,其实原理是一样的,就是端口不一样协议字段你不知道,而这也提高了点技术门槛,看我们来一点一点突破这些门槛,这次我们来用python发包模拟flash的客户端登陆. 以热 ...
- python 模拟浏览器
想用python模拟浏览器访问web的方法测试些东西,有哪几种方法呢? 一类:单纯的访问web,不解析其js,css等. 1. urllib2 #-*- coding:utf-8 -* import ...
- 【DataStructure In Python】Python模拟二叉树
使用Python模拟二叉树的基本操作,感觉写起来很别扭.最近做编译的优化,觉得拓扑排序这种东西比较强多.近期刷ACM,发现STL不会用实在太伤了.决定花点儿时间学习一下STL.Boost其实也很强大. ...
- 【DataStructure In Python】Python模拟栈和队列
用Python模拟栈和队列主要是利用List,当然也可以使用collection的deque.以下内容为栈: #! /usr/bin/env python # DataStructure Stack ...
- Python模拟键盘输入和鼠标操作
Python模拟键盘输入和鼠标操作 一.Python键盘输入模拟: import win32api import win32con win32api.keybd_event(17,0,0,0) #c ...
随机推荐
- Koa中间件(middleware)级联原理
前言 上次看到了koa-compose的代码,今天来说一下koa中间件的级联以及工作原理. 中间件工作原理 初始化koa实例后,我们会用use方法来加载中间件(middleware),会有一个数组来存 ...
- nginx 自启动设置
首先,在linux系统的/etc/init.d/目录下创建nginx文件,使用如下命令: 1 vim /etc/init.d/nginx 在脚本中添加如下命令: #!/bin/sh # # nginx ...
- 3年java开发面试BAT,你必须彻底搞定Maven!
前言 现在的Java项目中,Maven随处可见. Maven的仓库管理.依赖管理.继承和聚合等特性为项目的构建提供了一整套完善的解决方案,如果你搞不懂Maven,那么一个多模块的项目足以让你头疼,依赖 ...
- flash插件
偶尔见到别人的博客侧边栏 有一些很有意思的flash插件,也想加入到自己博客里面,这里来大概讲一下~ 一.支持js代码 首先要在 博客设置 >开启博客侧边栏公告的js代码支持,提交审核后 很快 ...
- hdu 5532 Almost Sorted Array (水题)
Almost Sorted Array Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Ot ...
- Django模型层—ORM
目录 一.模型层(models) 1-1. 常用的字段类型 1-2. 字段参数 1-3. 自定义char字段 1-4. 外键关系 二.Django中测试脚本的使用 三.单表操作 3-1. 添加记录 3 ...
- svn下载多模块及依赖框架的项目
安装TortoiseSVN之后,在新建的文件里右键svn checkout 输入公司配给的svn地址.用户名.密码 需要分模块下载的项目在地址后面的三个...中选择需要下载的项目,点击OK等待下载完成
- 安卓逆向基础(002)-android虚拟机
一, android分两种 1.Android 5.0以下(不含5.0) dalvik字节码 为dalvik虚拟机(jit机制) 基于寄存器架构 .dex=>dexopt=>.odex d ...
- 2016/10/13 oracle中的round()
语法: ROUND(number,num_digits) 其中Number是需要进行四舍五入的数字:Num_digits为指定的位数,按此位数进行四舍五入,如果 num_digits 大于 0,则四舍 ...
- test-hellow world!
//for C #include<stdio.h> int main() { printf("hellow world!"); return 0; } #for pyt ...