网:https://twistedmatrix.com/trac/

http://www.cnblogs.com/wy-wangyan/p/5252271.html

What is Twisted?

Twisted is an event-driven networking engine written in Python and licensed under the open source ​MIT license. Twisted runs on Python 2 and an ever growing subset also works with Python 3.

twisted是python实现的基于事件驱动的异步网络通信构架。可以在官网上在线浏览twisted的源码,也有svn可以自行下载,源码还是比较清晰易懂的。接下来的代码或者例子,文档很多都来源于官网介绍。

第一个问题是为什么项目叫twisted?   我的理解是由于构成twisted的主要构件deferred list, 有两个回调链,如图所示,回调链每一项包含一个(callback,errback)对。twisted按照回调链从第一个callback开始执行,如果出错执行下一个回调函数对应的errback,如果执行成功,再回到下下个callback继续执行。是不是很twisted?

第二个问题是什么是基于事件驱动的异步网络框架?

我们写过网络通信程序的都熟悉socket, 都知道select/poll/epoll这些网络多路复用程序,都对应着读或者写操作,twisted的构成中包含一个reacotor的东东,就是很多异步事件框架都有的概念反应堆模式,这是个单例模式,同一时间内只有一个reactor在运行。reactor.run(), 我们说的基于事件就是这样的一个事件循环,twisted等待事件就绪,然后调用回调函数,返回结果。当然它是基于select/poll/epoll的输入输出(读、写)事件。

关于反应堆模式: 请移步这里,这个大牛的翻译:http://www.cnblogs.com/pugang/p/4621373.html

那么什么又是异步? 同样的,我们知道网络通信有几个模式,在各种面试中也或有问到,关于同步,异步,阻塞,非阻塞的区别。

关于这个解释的文章很多,权威的请参考《unix网络编程》中关于unix网络i/o模式的描述。说说我自己的理解,在Linux中所有都是文件,socket当然也是,网络i/o是i/o的一种嘛。我们的应用程序也要包含两部分的内容,一个是用户态一个是内核态的内核调用。网络i/o包含了两部分的内容:

1. 应用程序陷入内核态等待数据就绪

2. 将数据从内核空间复制到用户空间。

阻塞就是在这两个阶段都在等待,都被block了,一直等待内核的返回。

非阻塞就是我们熟悉的socket.setblocking(0),或者fnctl设置的非阻塞flag;它只是在第二个阶段阻塞了,在一个阶段,应用程序知道数据未准备好后,立刻返回错误码EAGAIN/EWOULDBLOCK,知道数据准备结束,复制完毕后返回。

同步指的是等待I/O操作的完成。

异步指的是不必等待I/O操作完成,直接返回,等到第二阶段完成后,内核主动通知进程结束。

所以你说区别,我觉得就是阻塞/非阻塞对应的是一个当前的一个状态,同步/异步着眼于整个大局或操作。

我们今天是要说事件驱动的,前面说了我们依赖于select/poll/epoll,他们都是网络多路复用i/o,用了它们不需要再建多线程,线程池这些东西就能同时监控多个fd。有人叫它们异步(同步)非阻塞I/0, 但是从实际上来说,他们也是同步阻塞的,select/poll/epoll阻塞在select(), epoll.wait()这些函数中,等到数据就绪,然后开始第一个阶段,然后第二个阶段,在第二个阶段中也是I/O阻塞的嘛,所以说它们阻塞在了两个地方,而且需要等待I/O操作的完成。那到底有没有异步I/O,异步I/O需要操作系统底层的支持,目前好像还没有满意的异步I/O,有一些实现也是基于线程/线程池模拟实现。

那twisted既然用到了select/poll/epoll,它为什么叫基于事件的异步框架。因为它模式了异步I/O,它使用reactor模式处理事件循环,使用deferred处理回调函数,用户可以自己写一个回调函数,然后放到deferred list中,twsited会在事件通知就绪后调用这些回调函数,执行完毕,返回结果。看,是不是异步I/O。其它的一些基于事件的异步框架,像java的netty也是这样模拟的。

今天写到这里,下一篇准备分析select/epoll这些多路复用I/O,再从socket/epoll的例子入手,开始twisted的讲解。有错误之处,敬请指正,共同学习

python异步框架twisted_twisted是python实现的基于事件驱动的异步网络通信构架。相关推荐

  1. python神经网络框架有哪些,python调用神经网络模型

    人工智能 Python深度学习库有哪些 由于Python的易用性和可扩展性,众多深度学习框架提供了Python接口,其中较为流行的深度学习库如下:第一:CaffeCaffe是一个以表达式.速度和模块化 ...

  2. python pipeline框架_介绍Python的Django框架中的静态资源管理器django-pipeline

    django-pipeline 是一个 Django 下非常方便的静态资源管理 app,尤其是 1.2 版本之后,利用 django-staticfiles 的collectstatic 命令,在开发 ...

  3. python爬虫框架排行榜-常用python爬虫框架整理

    Python中好用的爬虫框架 一般比价小型的爬虫需求,我是直接使用requests库 + bs4就解决了,再麻烦点就使用selenium解决js的异步 加载问题.相对比较大型的需求才使用框架,主要是便 ...

  4. python 报表框架_自学Python还不晚!阿里达摩院推荐的Python学习教程,分享给大家...

    在互联网信息爆炸的时代,我们经常面临各种与信息搜集有关的事情,但是信息来源网站多,信息量大,如果采用常规的人工搜索+office软件整理,往往要花费大量的时间. 这里为大家介绍一个门槛低.易上手的工具 ...

  5. python自动化框架pytest接口关联串联_基于python接口自动化框架搭建_pytest+jenkins+allure...

    本接口测试框架使用python语言实现,基于pytest测试框架,同时集成Jenkins和Allure 核心特性 封装requests请求,使用装饰器模式 详细的请求日志输出 环境与数据隔离,实现不同 ...

  6. python支持向量机框架_Netflix 内部 Python 框架 Metaflow 正式开源,可加速机器学习模型部署...

    近日,美国视频流媒体平台及视频出版制作公司 Netflix 网飞的数据科学团队宣布正式开源其 Python 库 Metaflow,以帮助更多数据科学家与工程师构建.管理相关的数据科学项目. Metaf ...

  7. python数据采集框架_20190715《Python网络数据采集》第 1 章

    <Python网络数据采集>7月8号-7月10号,这三天将该书精读一遍,脑海中有了一个爬虫大体框架后,对于后续学习将更加有全局感. 此前,曾试验看视频学习,但是一个视频基本2小时,全部拿下 ...

  8. python 自动化框架_学会Python+Selenium,分分钟搭建Web自动化框架!

    用python+selenium实现UI自动化测试,要有一些HTML和xpth的基础,当然python基础一定是必须要会的.笔者建议花点时间了解下相关基础知识,不至于后面发懵. 一.什么是seleni ...

  9. python智能机器人框架_【python】机器人框架+骑乘,pythonRobotframeworkride

    安装python IDE 基础上 直接安装 Robot Framework 搭建记录 需要安装得主要包支持 其中由于速度限制问题下载较慢,所以都指定了在aliyun网站下载包支持 python -m ...

最新文章

  1. 姓名、病史、医疗影像通通泄露,500万人数据库没密码随便看,AI医疗暴露危机...
  2. tomcat+nginx+redis实现均衡负载、session共享(一)
  3. [转]jkeyll的安装步骤
  4. No module named pycurl(无法使用yum和pip的情况下的解决方案)
  5. 逾期之后还能贷款吗?
  6. php iis session 超时设置,如何配置IIS Session超时时间
  7. 恒大拟36.6亿元出售水晶城项目 企查查显示管理公司曾因违规建设被罚超900万...
  8. C语言isalnum函数介绍、示例和实现
  9. 男孩子一定要注意保护自己!
  10. 190317每日一句
  11. android+复制大文件,手机SD卡无法复制拷贝大文件的解决方法
  12. mysql按经纬度排序_mysql根据经纬度查找排序
  13. Spring in Action:@Vaild 表单验证不起作用
  14. 龙蜥LoongArch架构研发全揭秘,龙芯开辟龙腾计划技术合作新范式
  15. PCB LAYOUT高速信号走线指南
  16. 《计算机网络管理》_Chap2
  17. 自动驾驶决策规划算法第一章笔记 忠厚老实的老王
  18. 爬虫期末考试笔记(选择题)
  19. 新一波 JavaScript Web 框架
  20. Hadoop分布式集群安装

热门文章

  1. C#中string类型赋值问题
  2. android 设置Button或者ImageButton的背景透明 半透明 透明
  3. scala:异常处理(try/catch)
  4. 聚焦智造 共筑生态——“2016智能硬件生态圈品牌交流会”即将举行
  5. [Ubuntu]使用dict/dictd英文字典
  6. 详测 Generics Collections TQueue (3): OnNotify、Extract
  7. 关于eclipse的实用技巧
  8. 如何模拟鼠标的拖拽行为.
  9. Cisco ASA 5500系列防火墙 Series Adaptive Security Appliances
  10. ActiveMQ的queue以及topic两种消息处理机制分析