2013年8月30日

第二十二部分 结束[转]

摘要: 你可以从":doc:`p01`"开始阅读;也可以浏览":doc:`index`"的索引全部完成 呼呼! 感谢你一路支持. 在我开始时完全没有想到这个系列会这样长,会花这么多时间完成,但是创建这个系列的过程使我非常享受,也希望你喜欢它.既然我已经完成了,我会进一步考虑将其转化为PDF格式.然而,不保证.最后,我想总结一些帮助你继续学习Twisted的建议.进一步阅读 首先,我建议阅读Twisted的在线文档. 虽然它备受指责,但我觉得这总比饱受赞誉要好.如果你希望使用Twisted进行网络编程, 那么Jean-Paul Calderone的广受关注的系列T 阅读全文

posted @ 2013-08-30 09:35 无为在歧路 阅读(105) 评论(0) 推荐(0) 编辑

第二十一部分 惰性不是迟缓: Twisted和Haskell[转]

摘要: 你可以从 ":doc:`p01`" 开始阅读;也可以从 ":doc:`index`" 浏览索引.简介 在上一个部分我们对比了Twisted与Erlang,并将注意力集中在它们共有的一些思想上.结果表明使用Erlang也是非常简便的,因为异步I/O和反应式编程是Erlang运行时和进程模型的关键元素.今天我们想走得更远一点,去看一看Haskell—— 另一种功能性语言,然而与Erlang有很大不同(当然与Python也不同).这里面没有太多的平行概念,但我们仍然会发现藏在下面的异步I/O概念.F —— 功能性虽然Erlang是功能性语言,它主要关注可靠的并 阅读全文

posted @ 2013-08-30 09:34 无为在歧路 阅读(192) 评论(0) 推荐(0) 编辑

第二十部分 轮子中的轮子: Twisted和Erlang[转]

摘要: 你可以从 ":doc:`p01`" 开始阅读;也可以从 ":doc:`index`" 浏览索引.简介 在这个系列中,有一个事实我们还没有介绍,即混合同步的"普通Python"代码与异步Twisted代码不是一个简单的任务,因为在Twisted程序中阻滞不定时间将使异步模型的优势丧失殆尽.如果你是初次接触异步编程,那么你得到的知识看起来有一些局限.你可以在Twisted框架内使用这些新技术,而不是在更广阔的一般Python代码世界中.同时,当用Twisted工作时,你仅仅局限于那些专门为作为Twisted程序一部分所写的库,至少如果你想 阅读全文

posted @ 2013-08-30 09:32 无为在歧路 阅读(152) 评论(0) 推荐(0) 编辑

第十九部分 改变之前的想法[转]

摘要: 你可以从 ":doc:`p01`" 开始阅读;也可以从 ":doc:`index`" 浏览索引.简介 Twisted是一个正在进展的项目,它的开发者会定期添加新的特性并且扩展旧的特性.随着Twisted 10.1.0发布,开发者向Deferred类添加了一个新的特性——cancellation——这正是我们今天要研究的.异步编程将请求和响应解耦了,如此又带来一个新的可能性:在请求结果和返回结果之间,你可能决定不再需要这个结果了.考虑一下:doc:`p14`中的诗歌代理服务器.下面是这个如何工作的,至少对于诗歌的第一次请求:一个对诗歌的请求来了.这个代理联 阅读全文

posted @ 2013-08-30 09:27 无为在歧路 阅读(136) 评论(0) 推荐(0) 编辑

第十八部分 Deferreds 全貌[转]

摘要: 你可以从 ":doc:`p01`" 开始阅读;也可以浏览 ":doc:`index`" 的索引简介 在上一个部分,我们学习了使用生成器构造顺序异步回调的新方法.这样,包括deferreds,我们现在有两种将异步操作链接在一起的方法.有时,然而,我们需要"并行"的运行一组异步操作.由于Twisted是单线程的,它实际并不会并发运行,但我们希望使用异步I/O在一组任务上尽可能快的工作.以我们的诗歌客户端为例,它从多个服务器同时下载诗歌,而不是一个接一个的方式.这就是使用Twisted下载诗歌的全部特点.作为一个结果,所有诗歌客户端需要解决 阅读全文

posted @ 2013-08-30 09:22 无为在歧路 阅读(159) 评论(0) 推荐(0) 编辑

第十七部分 构造"回调"的另一种方法[转]

摘要: 你可以从":doc:`p01`"开始阅读;也可以浏览":doc:`index`"的索引简介这部分我们将回到"回调"这个主题.我们将介绍另外一种写回调函数的方法,即在Twisted中使用generators. 我们将演示如何使用这种方法并且与使用"纯"Deferreds进行对比. 最后, 我们将使用这种技术重写诗歌客户端. 但首先我们来回顾一下generators的工作原理,以便弄清楚它为何是创建回调的候选方法.简要回顾生成器你可能知道, 一个Python生成器是一个"可重启的函数",它是在函数体 阅读全文

posted @ 2013-08-30 09:20 无为在歧路 阅读(186) 评论(0) 推荐(0) 编辑

第十六部分 Twisted 进程守护[转]

摘要: 你可以从":doc:`p01`"开始阅读;也可以浏览":doc:`index`"的索引简介目前我们所写的服务器仅仅运行在终端窗口,结果通过print语句输出到屏幕.这对于开发来说已经足够,但对于产品级的部署还远远不够. 健壮的产品级服务器应该:运行一个daemon进程,这个进程不与任何终端或用户会话相关.因为没有人愿意当某用户登出时服务自动关闭.将调试和错误信息发送到一系列滚转日志文件, 或者syslog服务.放弃过高的权限,比如,在运行前切换到较低权限.保存它的pid文件以便管理员方便地向 daemon发送信号.我们可以利用Twisted提供的twis 阅读全文

posted @ 2013-08-30 09:16 无为在歧路 阅读(274) 评论(0) 推荐(0) 编辑

第十五部分 测试诗歌[转]

摘要: 你可以从":doc:`p01`"开始阅读;也可以从":doc:`index`"浏览索引.简介在我们探索Twisted的过程中写了很多代码,但目前我们却忽略了一些重要的东西 —— 测试.你也是会怀疑怎样用像unittest这样Python自带的同步框架测试异步代码.答案是你不能.正如我们已经发现的,同步代码和异步代码是不能混合的,至少不容易.幸运地是,Twisted包含自己的测试框架,叫trial,它支持测试异步代码(当然你也可以用它测试同步代码).我们假设你已经熟悉了unittest的机理和相似的测试框架,它允许你通过定义类创建测试.这个类通常是一个父类 阅读全文

posted @ 2013-08-30 09:11 无为在歧路 阅读(98) 评论(0) 推荐(0) 编辑

第十四部分 Deferred用于同步环境[转]

摘要: 你可以从这里从头开始阅读这个系列。介绍 这部分我们要介绍Deferred的另外一个功能。便于讨论,我们设定如下情景:假设由于众多的内部网请求一个外部诗歌下载服务器,但由于这个外部下载服务器性能太差或请求负荷太重。因此,我们不想将所有的内部请求全部发送到外部服务器。我们的处理办法是,在中间添加一个缓存代理。当一个请求来到后,我们可以从中间缓存代理中找到缓存的备份(如果有缓存)或者直接从外部服务器获得。部署图如图30所示:图30缓存代理服务器 考虑到,客户端端发送请求来时,此缓存代理可能会将本地的缓冲的诗歌取出并回复,也有可能需要异步等待外部诗歌下载服务器的诗歌回复。如此一来,就会出现这样的情.. 阅读全文

posted @ 2013-08-30 09:07 无为在歧路 阅读(190) 评论(0) 推荐(0) 编辑

2013年8月29日

第十三部分 使用Deferred新功能实现新客户端[转]

摘要: 你可以从这里从头阅读这个系列。介绍 回忆下第10部分中的客户端5.1版。客户端使用一个Deferred来管理所有的回调链,其中包括一个格式转换引擎的调用。在那个版本中,这个引擎的实现是同步的。(即等待其执行再切到其它函数或任务中)现在我们想实现一个新的客户端,其使用我们在第十二部分实现的格式服务器提供的格式转换服务。但这里有一个问题需要说清楚:由于格式转换服务是通过网络获取的,因此我们需要使用异步I/O。这也就意味着我们获取格式转换服务的API必须是异步实现的。换句话说,try_to_cummingsify回调将会在新客户端中返回一个deferred。如果在一个deferred的回调链中的一. 阅读全文

posted @ 2013-08-29 17:34 无为在歧路 阅读(134) 评论(0) 推荐(0) 编辑

导航