最近在学习Twisted,在此归纳一些重要的概念和理念。

事件驱动编程(Event-Driven Programming)

Twisted是一个基于事件驱动的网络引擎。

在这种编程模式中,程序流程是由外部事件决定的。它的特性表现在一个事件循环以及采用回调来触发事件的相关动作。将此与其它两种常见模型进行比较应该会更益于理解,他们是单线程(同步)和多线程编程。

我们来看图说话。假如他们都需要处理三个任务,并且在进行I/O操作的时候均会发生阻塞。他们的表现形式将会如下图这样:

从左图可以看出,在单线程处理过程中,每个任务将会按顺序依次执行。当一个任务在处理I/O操作时,其它的任务都必须等待该I/O操作的完成。这无可避免的将会减慢整体的进度。

而在多线程处理中,得益于多个线程的协同工作,这一境况将大大改善,如中图所示。当一个线程发生I/O阻塞时,其它的线程并不会受其影响,这样就大大提高了效率。但同时,他也会带来一些问题。因为多个工作会同时进行,多数情况下多个线程间就不可避免的会共享数据,如果处理不得当就很容易引发各种问题。

最后一个就是右图所示的事件驱动版本,它会在一个线程中交错地处理多个任务。当执行I/O或一些较为费时的处理时,就会在事件循环中注册一个回调,使得它可以在完成这一费时的处理之后再被执行。回调的作用在于当完成这个事件触发之后应当如何进行处理。事件循环则会循环的检测事件的到来并将其正确的分派到对应的回调中去。这使得程序遭遇这种境况时能在无需其它线程的帮助下顺利的继续推进。

正因为此,使得事件驱动程序具有像多线程程序那样的并发性、又不失单线程中那样简单的逻辑。因此它非常适合处理一下一些场景:

1. 有大量的任务,因此在一个时刻至少有一个任务要运行;

2. 任务执行大量的I/O操作;

3. 任务之间相互独立,以至于任务内部的交互很少。

而网络服务就特别具有这些特点,因此可以是该模型的典型代表。

python事件驱动编程_初识Twisted:事件驱动编程相关推荐

  1. 华兴数控g71外圆循环编程_数控车床加工编程典型实例分析(西门子802S数控系统)...

    这是一篇带有教学色彩的习作,文章对数控编程的方式和步骤进行了简明的阐述,并针对一个典型零件的数控车削加工给出了一套程序.程序是以西门子802S数控系统为例编写的. 数控机床是一种技术密集度及自动化程度 ...

  2. python实例编程_浅谈如何编程Python3——Python实例(3)

    浅谈如何编程Python3--Python实例(3) # 测试实例一 print("测试实例一") str= "runoob.com"print(str.isa ...

  3. python中年大叔学编程_中年大叔学编程-Python简单操作文件

    原标题:中年大叔学编程-Python简单操作文件 在计算机中,经常打交道的就是各种文档,用得比较多的软件就是office和记事本来操作文件,那么我们试试用Python来简单读写文件. Open函数的用 ...

  4. 风变编程python 知乎_如何看待风变编程的 Python 网课?

    毕业感想 我是一名销售.自己本身对于编程对挺感兴趣的,但是兴趣也就停留在想去学编程,但是从来没有真正动手过,学过一段时间小程序.不过,后来放弃了.现在都在讲未来时ai的世界,所以,想通过学习pytho ...

  5. 全国python一级考试_关于全国青少年软件编程(Python)等级考试试卷(一级)测试卷情况网络调研...

    Q1. 请问您的性别是?(单选题) Q2. 您的学历?(单选题) Q3. 您家庭背景?(单选题) Q4. 您的姓名:(填空题) Q5. 关于Python的编程环境,下列的哪个表述是正确的?(单选题)A ...

  6. 如何高效学python编程_如何高效自学编程?天下没有难学的python

    这是一个不一样的python教程,我们的特点是教会如何高效地自学,化被动学习为主动学习 在过往的经验中发现,很多学习编程的同学,都有过 从入门到放弃 的体验,我也曾是其中一员.后来经过深入分析,发现了 ...

  7. python贺卡编程_一种卡片编程机及其编程方法与流程

    本发明涉及编程领域,特别涉及一种卡片编程机及其编程方法. 背景技术: 人工智能日趋火热,家长们也逐渐意识到孩子的培养方向,编程教育不仅为孩子的将来提前打下基础,而且还能够培养孩子的逻辑思维能力,优化孩 ...

  8. 教孩子学编程 python语言版_教孩子学编程 PYTHON语言版 PDF_IT教程网

    资源名称:教孩子学编程 PYTHON语言版 PDF 资源目录: 第1章Python基础--认识环境1 1.1认识Python3 1.2用Python编写程序5 1.3运行Python程序5 1.4本章 ...

  9. python蟒蛇编程_《大蟒蛇编程第1课》如何用3分钟写出第一个动画程序

    几个月以前,我写了一篇"为什么要从小学习编程", 后来非常多人加我微信,有的说想学习编程,很着急,有的遇到问题希望我给答疑的,有的说希望我能开班教他的孩子. 后来,我真的做了一个小 ...

  10. 编程猫python讲师面试_你为什么从编程猫离职?

    工作内容的原因吧. 职位是python老师,以为是开个直播线上教学,其实并不是,要一对多而且每个学生的进度不一样,所以刚开始工作的话熟课这方面要花大功夫.并且上课时一定时间内必须回复学生,培训时一对一 ...

最新文章

  1. JavaScript_原型和继承(2017-03-15)
  2. FreeSwitch Sip【转】
  3. 2019 Flink Forward 大会最全视频来了!(附PPT下载) | 5大专题不容错过
  4. linux 追加多行文件,linux多行文件信息追加
  5. 每年通过率仅1%的“天才考试”,中国到底应不应该学?
  6. Linux常用命令(第二版) --文件搜索命令
  7. js/bat批处理调用谷歌浏览器chrome批量打开网页测试web性能
  8. 如何使用wnr计时来管理你的时间计划
  9. hdu 1695GCD容斥
  10. 安徽省计算机二级水平考试试卷,2010安徽省全国计算机等级考试二级笔试试卷VB试题及答案...
  11. shell学习教程(超详细完整)
  12. 现代电力电子期末考试
  13. 【论文笔记】Semantic Parsing on Freebase from Question-Answer Pairs
  14. 2020.9.8:Spring cloud :install时报错
  15. 飞桨领航团武汉长沙回顾|识别皮肤病,一秒记笔记,AI还有哪些惊喜?
  16. java 计算开始时间与结束时间的时间差 精确到秒
  17. FPGA图像处理的前景如何?
  18. 将xlsx转换为csv的神器
  19. Elasticsearch:如何使用 Elasticsearch 6.2 搜索中文、日文和韩文文本 - 第 1 部分: 分析工具
  20. 嵌入式软件开发面试题总结三.

热门文章

  1. SharpGL学习笔记(十二) 光源例子:解决光源场景中的常见问题
  2. HDU 4050 wolf5x 概率dp 难度:1
  3. js 弹出提示信息,并跳转指定页面代码分享
  4. [转]cocos2d-x场景切换时内存过高导致crash解决方法
  5. Problem D: 平面划分
  6. 嵌入式linux入门六步曲
  7. Atitit.c# .net 3.5 4.0 4.5 5.0 6.0各个版本新特性战略规划总结
  8. .atitit.web 推送实现解决方案集合(3)----dwr3 Reverse Ajax
  9. paip.svn使用最佳实践
  10. 程序安全性之配置文件安全