twsited
sliderSun
本人知乎ID:sliderSun
展开
-
twisted前言
模型 我们将首先回顾两个(希望的)熟悉的模型,以便与异步模型进行对比。作为说明,我们将想象一个程序,由三个概念上不同的任务组成,必须执行完成该程序。稍后我们会更加具体地完成这些任务,但是现在我们不会说什么,除了程序必须执行它们。注意我在非技术意义上使用“需要做的事情”的“任务”。 我们将看到的第一个模型是单线程同步模型,如图1所示: 图1:同步模型 这是最简单的编程风格。每个任翻译 2017-07-04 09:38:43 · 303 阅读 · 0 评论 -
defer全貌
简介 在上一个部分,我们学习了使用生成器构造顺序异步回调的新方法, 加上 deferreds,我们现在有两种将异步操作链接在一起的方法. 但是有时我们需要"并行"的运行一组异步操作.由于Twisted是单线程的,它实际并不会并发运行,但我们希望使用异步I/O在一组任务上尽可能快的工作.以我们的诗歌客户端为例,它从多个服务器同时下载诗歌,而不是一个接一个的方式.这就是使用Twisted下翻译 2017-07-05 10:09:52 · 333 阅读 · 0 评论 -
内联回调
简介 这部分我们将回到"回调"这个主题.我们将介绍另外一种写回调函数的方法,即在Twisted中使用 generators. 我们将演示如何使用这种方法并且与使用"纯" Deferreds 进行对比. 最后, 我们将使用这种技术重写诗歌客户端. 但首先我们来回顾一下 generators的工作原理,以便弄清楚它为何是创建回调的候选方法. 简要回顾生成器 你可能知道, 一个Py翻译 2017-07-05 10:09:15 · 507 阅读 · 0 评论 -
Deferred用于同步环境
介绍 这部分我们要介绍Deferred的另外一个功能。便于讨论,我们设定如下情景:假设由于众多的内部网请求一个外部诗歌下载服务器,但由于这个外部下载服务器性能太差或请求负荷太重。因此,我们不想将所有的内部请求全部发送到外部服务器。 我们的处理办法是,在中间添加一个缓存代理。当一个请求来到后,缓存服务器会从缓存中返回备份(如果有缓存)或者直接从外部服务器获得。部署图如图30所示:翻译 2017-07-05 10:08:16 · 604 阅读 · 0 评论 -
使用Deferred新功能实现新客户端
介绍 回忆下第10部分中的客户端5.1版。客户端使用一个Deferred来管理所有的回调链,其中包括一个格式转换引擎的调用。在那个版本中,这个引擎的实现是同步的。 现在我们想实现一个新的客户端,使用我们在第十二部分实现的服务器提供的格式转换服务。但这里有一个问题需要说清楚:由于格式转换服务是通过网络获取的,因此我们需要使用异步I/O。这也就意味着我们获取格式转换服务的API必须是异步实翻译 2017-07-05 10:07:43 · 286 阅读 · 0 评论 -
增强defer功能的客户端
版本5.0 现在我们将要向诗歌下载客户端添加一些新的处理逻辑,包括在第九部分提到要添加的功能。不过,首先我要说明一点:我并不知道如何实现Byronification引擎。那超出了我的编程能力范围。取而代之的,我想实现一个简单的功能,即Cummingsifier。其只是将诗歌内容转换成小写字母: def cummingsify(poem) return poem.lower()翻译 2017-07-05 10:07:00 · 206 阅读 · 0 评论 -
第二个小插曲,deferred
更多关于回调的知识 稍微停下来再思考一下回调的机制。尽管对于以Twisted方式使用Deferred写一个简单的异步程序已经非常了解了,但Deferred提供更多的是只有在比较复杂环境下才会用到的功能。因此,下面我们自己想出一些复杂的环境,以此来观察当使用回调编程时会遇到哪些问题。然后再来看看deferred是如何解决这些问题的。 因此,我们为诗歌下载客户端添加了一个假想的功能。设想一翻译 2017-07-05 10:06:02 · 267 阅读 · 0 评论 -
使用Deferred的诗歌下载客户端
客户端4.0 我们已经对deferreds有些理解了,现在我们可以使用它重写我们的客户端。你可以在twisted-client-4/get-poetry.py中看到它的实现。 这里的get_poetry已经再也不需要callback与errback参数了。相反,返回了一个用户可能根据需要添加callbacks和errbacks的新deferred。 def get_poetry(翻译 2017-07-05 10:05:12 · 240 阅读 · 0 评论 -
小插曲,Deferred
回调函数的后序发展 在第六部分我们认识到这样一个情况:回调是Twisted异步编程中的基础。除了与reactor交互外,回调可以安插在任何我们写的Twisted结构内。因此在使用Twisted或其它基于reactor的异步编程体系时,都意味需要将我们的代码组织成一系列由reactor循环可以激活的回调函数链。 即使一个简单的get_poetry函数都需要回调,两个回调函数中一个用于处理翻译 2017-07-05 10:04:18 · 266 阅读 · 0 评论 -
初识Twisted
用twisted的方式实现前面的内容 最终我们将使用twisted的方式来重新实现我们前面的异步模式客户端。不过,首先我们先稍微写点简单的twisted程序来认识一下twisted。 最最简单的twisted程序就是下面的代码,其在twisted-intro目录中的basic-twisted/simple.py中。 from twisted.internet import rea翻译 2017-07-05 10:02:35 · 295 阅读 · 0 评论 -
异步编程模式与Reactor初探
第二部分用低效的诗歌服务器来启发对Twisted机制的理解,现在我们可能要写一些代码。在开始之前,我们都做出一些必要的假设。 对你的假设 在展开讨论前,我假设你已经有过用Python写同步程序的经历并且至少知道一点有关Python的Sockt编程的经验。如果你从没有写过Socket程序,或许你可以去看看Socket模块的文档,尤其是后面的示例代码。如果你没有用过Python的话,那后面翻译 2017-07-05 10:00:33 · 1416 阅读 · 0 评论 -
取消之前的意图
简介 Twisted是一个正在进展的项目,它的开发者会定期添加新的特性并且扩展旧的特性. 随着Twisted 10.1.0发布,开发者向 Deferred 类添加了一个新的特性—— cancellation ——这正是我们今天要研究的. 异步编程将请求和响应解耦了,如此又带来一个新的可能性:在请求结果和返回结果之间,你可能决定不再需要这个结果了.考虑一下 第十四节 中的诗歌代理服翻译 2017-07-05 10:11:25 · 800 阅读 · 0 评论