python epoll
需要用python实现中断的功能,所以用epoll监听gpio文件的变化。写个demo测试一下。
参考:
http://www.cnblogs.com/coser/archive/2012/01/06/2315216.html
http://www.cnblogs.com/helloworldtoyou/p/5532271.html
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import select
import gpio
# 申请gpio
def gpioExport(gpioIndex):
with open('/sys/class/gpio/export', 'wb') as f:
f.write(str(gpioIndex).encode())
# 设置gpio为输入
def setInput(gpioIndex):
with open('/sys/class/gpio/gpio%d/direction' % gpioIndex, 'wb') as f:
f.write('in'.encode())
# 设置gpio触发方式
def setEdge(gpioIndex, edge):
with open('/sys/class/gpio/gpio%d/edge' % gpioIndex, 'wb') as f:
f.write(edge.encode())
gpioExport(15)
gpioExport(36)
setInput(15)
setInput(36)
# 上升沿,下降沿触发
setEdge(15, 'both')
setEdge(36, 'both')
# 这里和C语言中返回值不同。C语言返回值是个int,表示文件描述符的值,而python中需要通过fileno()函数来获取。
# 读取值
f1 = open('/sys/class/gpio/gpio%d/value' % 15, 'r+')
f2 = open('/sys/class/gpio/gpio%d/value' % 36, 'r+')
print ('fd1: %d' % f1.fileno())
print ('fd2: %d' % f2.fileno())
epoll = select.epoll()
# 注册
epoll.register(f1, select.EPOLLERR | select.EPOLLPRI)
epoll.register(f2, select.EPOLLERR | select.EPOLLPRI)
# 进入主循环,监听gpio的电平变化,
while True:
events = epoll.poll() # 没有设置时间,一直阻塞
for fileno, event in events:
# 有数据需要读取
if event & select.EPOLLPRI:
# f1发生变化
if fileno == f1.fileno():
print ('f1: %s' % f1.read().strip('\n'))
# 文件读取完,将文件指针偏移到文件开头,方便下次读取
f1.seek(0, 0)
# f2发生变化
elif fileno == f2.fileno():
print ('f2: %s' % f2.read().strip('\n'))
f2.seek(0, 0)
# 出现错误
if event & select.EPOLLERR:
pass
Tony Liu
2017-6-7, Shenzhen
python epoll的更多相关文章
- python epoll实现异步socket
一.同步和异步: 在程序执行中,同步运行意味着等待调用的函数.线程.子进程等的返回结果后继续处理:异步指不等待当下的返回结果,直接运行主进程下面的程序,等到有返回结果时,通知主进程处理.有点高效. 二 ...
- python epoll方式tcp连接回发消息
# -*- coding:utf-8 -*- import socket import select class testserver(): def __init__(self): self.serv ...
- 转一贴,今天实在写累了,也看累了--【Python异步非阻塞IO多路复用Select/Poll/Epoll使用】
下面这篇,原理理解了, 再结合 这一周来的心得体会,整个框架就差不多了... http://www.haiyun.me/archives/1056.html 有许多封装好的异步非阻塞IO多路复用框架, ...
- Python异步非阻塞IO多路复用Select/Poll/Epoll使用,线程,进程,协程
1.使用select模拟socketserver伪并发处理客户端请求,代码如下: import socket import select sk = socket.socket() sk.bind((' ...
- python--第十天总结(Select/Poll/Epoll使用 )
首先列一下,sellect.poll.epoll三者的区别 select select最早于1983年出现在4.2BSD中,它通过一个select()系统调用来监视多个文件描述符的数组,当select ...
- Python-Select/Poll/Epoll使用
select select最早于1983年出现在4.2BSD中,它通过一个select()系统调用来监视多个文件描述符的数组,当select()返回后,该数组中就绪的文件描述符便会被内核修改标志位,使 ...
- python网络编程——IO多路复用之epoll
1.内核EPOLL模型讲解 此部分参考http://blog.csdn.net/mango_song/article/details/42643971博文并整理 首先我们来定义流的概念,一个流 ...
- Python之路-python(Queue队列、进程、Gevent协程、Select\Poll\Epoll异步IO与事件驱动)
一.进程: 1.语法 2.进程间通讯 3.进程池 二.Gevent协程 三.Select\Poll\Epoll异步IO与事件驱动 一.进程: 1.语法 简单的启动线程语法 def run(name): ...
- Python自动化 【第十篇】:Python进阶-多进程/协程/事件驱动与Select\Poll\Epoll异步IO
本节内容: 多进程 协程 事件驱动与Select\Poll\Epoll异步IO 1. 多进程 启动多个进程 进程中启进程 父进程与子进程 进程间通信 不同进程间内存是不共享的,要想实现两个进程间 ...
随机推荐
- 菜鸟学SSH(十四)——Spring容器AOP的实现原理——动态代理
之前写了一篇关于IOC的博客——<Spring容器IOC解析及简单实现>,今天再来聊聊AOP.大家都知道Spring的两大特性是IOC和AOP,换句话说,容器的两大特性就是IOC和AOP. ...
- formidable处理多文件上传
首先,在html页面中,表单上传文件的控件需要加上multiple选项,或者multiple="multiple". 然后,在nodejs程序中处理post数据的路路由中使用for ...
- (原创)c++11改进我们的模式之改进单例模式
我会写关于c++11的一个系列的文章,会讲到如何使用c++11改进我们的程序,本次讲如何改进我们的模式,会讲到如何改进单例模式.观察者模式.访问者模式.工厂模式.命令模式等模式.通过c++11的改进, ...
- 每日英语:When The Boss Works Long Hours, Do We All Have To?
The problem: Every night, your workaholic boss is still glued to the computer when you need to leave ...
- 每日英语:How Your Knees Can Predict the Weather
The Wolff family of Paramus, N.J., was eyeing the gathering clouds and debating whether to cancel a ...
- MediaStore insert bitmap为黑色
MediaStore.Images.Media.insertImage(mFragmentActivity.getContentResolver(), qrBitmap, "xx券面值10元 ...
- 【驱动】linux设备驱动·扫盲
linux设备驱动 Linux系统把设备驱动分成字符设备.块设备和网络设备三种类型. 内核为设备驱动提供了注册和管理的接口,设备驱动还可以使用内核提供的其他功能以及访问内核资源. PCI局部总线 早期 ...
- visual studio 2005提示脚本错误 /VC/VCWizards/2052/Common.js
今天在做OCX添加接口的时候,莫名其妙的遇到visual studio 2005提示脚本错误,/VC/VCWizards/2052/Common.js. 网上找了很多资料,多数介绍修改注册表“vs20 ...
- java多线程14 :wait()和notify()/notifyAll()
轮询 线程本身是操作系统中独立的个体,但是线程与线程之间不是独立的个体,因为它们彼此之间要相互通信和协作. 想像一个场景,A线程做int型变量i的累加操作,B线程等待i到了10000就打印出i,怎么处 ...
- 字符驱动程序之——poll机制
关于这个韦老师给了一个简单的参考文档: poll机制分析 韦东山 2009.12.10 所有的系统调用,基本都可以在它的名字前加上“sys_”前缀,这就是它在内核中对应的函数.比如系统调用open.r ...