作者:dave@http://krondo.com/when-a-deferred-isnt/  译者:杨晓伟(采用意译) 你可以从这里从头开始阅读这个系列. 介绍 这部分我们要介绍Deferred的另外一个功能.便于讨论,我们设定如下情景:假设由于众多的内部网请求一个外部诗歌下载服务器,但由于这个外部下载服务器性能太差或请求负荷太重.因此,我们不想将所有的内部请求全部发送到外部服务器.我们的处理办法是,在中间添加一个缓存代理.当一个请求来到后,我们可以从中间缓存代理中找到缓存的备份(如果有缓存…
作者:dave@http://krondo.com/i-thought-i-wanted-it-but-i-changed-my-mind/  译者: Cheng Luo 你可以从”第一部分 Twist理论基础“开始阅读:也可以从”Twisted 入门!“浏览索引. 简介 Twisted是一个正在进展的项目,它的开发者会定期添加新的特性并且扩展旧的特性. 随着Twisted 10.1.0发布,开发者向 Deferred 类添加了一个新的特性—— cancellation ——这正是我们今天要研究…
作者:dave@http://krondo.com/deferred-poetry/  译者:杨晓伟(采用意译) 可以从这里从头开始阅读这个系列. 客户端4.0 我们已经对deferreds有些理解了,现在我们可以使用它重写我们的客户端.你可以在twisted-client-4/get-poetry.py中看到它的实现. 这里的get_poetry已经再也不需要callback与errback参数了.相反,返回了一个用户可能根据需要添加callbacks和errbacks的新deferred.…
作者:dave@http://krondo.com/an-interlude-deferred/  译者:杨晓伟(采用意译) 你可以从这里从头开始阅读这个系列 回调函数的后序发展 在第六部分我们认识这样一个情况:回调是Twisted异步编程中的基础.除了与reactor交互外,回调可以安插在任何我们写的Twisted结构内.因此在使用Twisted或其它基于reactor的异步编程体系时,都意味需要将我们的代码组织成一系列由reactor循环可以激活的回调函数链. 即使一个简单的get_poet…
作者:dave@http://krondo.com/and-then-we-took-it-higher/  译者:杨晓伟(采用意译) 你可以从这里从头开始阅读这个系列. 打造可以复用的诗歌下载客户端 我们在实现客户端上已经花了大量的工作.最新版本的(2.0)客户端使用了Transports,Protocols和Protocol Factories,即整个Twisted的网络框架.但仍有大的改进空间.2.0版本的客户端只能在命令行里下载诗歌.这是因为PoetryClientFactory不仅要下…
作者:dave@http://krondo.com/a-second-interlude-deferred/ 译者:杨晓伟(采用意译) 可以从这里从头来阅读这个系列 更多关于回调的知识 稍微停下来再思考一下回调的机制.尽管对于以Twisted方式使用Deferred写一个简单的异步程序已经非常了解了,但Deferred提供更多的是只有在比较复杂环境下才会用到的功能.因此,下面我们自己想出一些复杂的环境,以此来观察当使用回调编程时会遇到哪些问题.然后,再来看看deferred是如何解决这些问题的.…
作者:dave@http://krondo.com/deferred-all-the-way-down/  译者:杨晓伟(采用意译) 你可以从这里从头阅读这个系列. 介绍 回忆下第10部分中的客户端5.1版.客户端使用一个Deferred来管理所有的回调链,其中包括一个格式转换引擎的调用.在那个版本中,这个引擎的实现是同步的.(即等待其执行再切到其它函数或任务中) 现在我们想实现一个新的客户端,其使用我们在第十二部分实现的格式服务器提供的格式转换服务.但这里有一个问题需要说清楚:由于格式转换服务…
作者:dave@http://krondo.com/in-which-we-begin-at-the-beginning/  译者:杨晓伟(采用意译) 前言: 最近有人在Twisted邮件列表中提出诸如”为任务紧急的人提供一份Twisted介绍”的的需求.值得提前透露的是,这个序列并不会如他们所愿.尤其是介绍Twisted框架和基于Python 的异步编程而言,可能短时间无法讲清楚.因此,如果你时间紧急,这恐怕不是你想找的资料. 我相信如果对异步编程模型一无所知,快速的介绍同样无法让你对其有所理…
作者:dave@http://krondo.com/twisted-and-haskell/  译者: Cheng Luo 你可以从”第一部分 Twist理论基础“开始阅读:也可以从”Twisted 入门!“浏览索引. 简介 在上一个部分我们对比了Twisted与 Erlang,并将注意力集中在它们共有的一些思想上.结果表明使用Erlang也是非常简便的,因为异步I/O和反应式编程是Erlang运行时和进程模型的关键元素. 今天我们想走得更远一点,去看一看 Haskell —— 另一种功能性语言…
作者:dave@http://krondo.com/twisted-and-erlang/  译者: Cheng Luo 你可以从”第一部分 Twist理论基础“开始阅读:也可以从”Twisted 入门!“浏览索引. 简介 在这个系列中,有一个事实我们还没有介绍,即混合同步的”普通Python”代码与异步Twisted代码不是一个简单的任务,因为在Twisted程序中阻滞不定时间将使异步模型的优势丧失殆尽. 如果你是初次接触异步编程,那么你得到的知识看起来有一些局限.你可以在Twisted框架内…
作者:dave@http://krondo.com/tested-poetry/  译者: Cheng Luo 你可以从”第一部分 Twist理论基础“开始阅读:也可以从”Twisted 入门!“浏览索引. 简介 在我们探索Twisted的过程中写了很多代码,但目前我们却忽略了一些重要的东西 —— 测试.你也是会怀疑怎样用像 unittest 这样Python自带的同步框架测试异步代码.答案是你不能.正如我们已经发现的,同步代码和异步代码是不能混合的,至少不容易. 幸运地是,Twisted包含自…
作者:dave@http://krondo.com/just-another-way-to-spell-callback/  译者: Cheng Luo 你可以从”第一部分 Twist理论基础“开始阅读:也可以从”Twisted 入门!“浏览索引. 简介 这部分我们将回到”回调”这个主题.我们将介绍另外一种写回调函数的方法,即在Twisted中使用 generators. 我们将演示如何使用这种方法并且与使用”纯” Deferreds 进行对比. 最后, 我们将使用这种技术重写诗歌客户端. 但首…
作者:dave@http://krondo.com/a-poetry-transformation-server/  译者:杨晓伟(采用意译) 你可以从这里从头阅读这个系列. 新的服务器实现 这里我们要新写一个Twisted版的服务器.然后,再来讨论一些Deferred的新功能. 在第九.十部分,我们提出了诗歌转换引擎这个概念.由于其实现太过简单,因此我们用随机选择来模拟了可能会出现转换失败的情景.但如果转换引擎位于服务器端,那么当服务器宕机就会出现真实的转换失败的情景了. 因此,在这部分我们要…
作者:dave@http://krondo.com/slow-poetry-and-the-apocalypse/  译者:杨晓伟(采用意译) 这个系列是从这里开始的,欢迎你再次来到这里来.现在我们可能要写一些代码.在开始之前,我们都做出一些必要的假设. 关于对你的假设 在展开讨论前,我假设你已经有过用Python写同步程序的经历并且至少知道一点有关Python的Sockt编程的经验.如果你从没有写过Socket程序,或许你可以去看看Socket模块的文档,尤其是后面的示例代码.如果你没有用过P…
作者:dave@http://krondo.com/our-eye-beams-begin-to-twist/ 译者:杨晓伟(采用意译) 可以从这里从头开始阅读这个系列. 用twisted的方式实现前面的内容 最终我们将使用twisted的方式来重新实现我们前面的异步模式客户端.不过,首先我们先稍微写点简单的twisted程序来认识一下twisted. 最最简单的twisted程序就是下面的代码,其在twisted-intro目录中的basic-twisted/simple.py中. from…
作者:dave@http://krondo.com/part-22-the-end/  译者: Cheng Luo 你可以从”第一部分 Twist理论基础“开始阅读:也可以从”Twisted 入门!“浏览索引. 全部完成 呼呼! 感谢你一路支持. 在我开始时完全没有想到这个系列会这样长,会花这么多时间完成,但是创建这个系列的过程使我非常享受,也希望你喜欢它. 既然我已经完成了,我会进一步考虑将其转化为PDF格式.然而,不保证. 最后,我想总结一些帮助你继续学习Twisted的建议. 进一步阅读…
作者:dave@http://krondo.com/deferreds-en-masse/  译者: Cheng Luo 你可以从”第一部分 Twist理论基础“开始阅读:也可以从”Twisted 入门!“浏览索引. 简介 在上一个部分,我们学习了使用生成器构造顺序异步回调的新方法.这样,包括 deferreds,我们现在有两种将异步操作链接在一起的方法. 有时,然而,我们需要”并行”的运行一组异步操作.由于Twisted是单线程的,它实际并不会并发运行,但我们希望使用异步I/O在一组任务上尽可…
作者:dave@http://krondo.com/twisted-daemonologie/  译者: Cheng Luo 你可以从”第一部分 Twist理论基础“开始阅读:也可以从”Twisted 入门!“浏览索引. 简介 目前我们所写的服务器仅仅运行在终端窗口,结果通过 print 语句输出到屏幕.这对于开发来说已经足够,但对于产品级的部署还远远不够. 健壮的产品级服务器应该: 运行一个 daemon 进程,这个进程不与任何终端或用户会话相关.因为没有人愿意当某用户登出时服务自动关闭. 将…
作者:dave@http://krondo.com/an-introduction-to-asynchronous-programming-and-twisted/ 译者:杨晓伟(采用意译) 可以从这里从头开始阅读这个系列. 版本5.0 现在我们将要向诗歌下载客户端添加一些新的处理逻辑,包括在第九部分提到要添加的功能.不过,首先我要说明一点:我并不知道如何实现Byronification引擎.那超出了我的编程能力范围.取而代之的,我想实现一个简单的功能,即Cummingsifier.其只是将诗歌…
作者:dave@http://krondo.com/twistier-poetry/  译者:杨晓伟(采用意译) 你可以从这里从头开始阅读这个系列 抽象地构建客户端 在第四部分中,我们构建了第一个使用Twisted的客户端.它确实能很好地工作,但仍有提高的空间. 首先是,这个客户端竟然有创建网络端口并接收端口处的数据这样枯燥的代码.Twisted理应为我们实现这些例程性功能,省得我们每次写一个新的程序时都要去自己实现.Twisted这样做也将我们从像异步I/O操作中包括许多像异常处理这样的细节处…
作者:dave@http://krondo.com/twisted-poetry/  译者:杨晓伟(采用意译) 你可以在这里从头开始阅读这个系列. 第一个twisted支持的诗歌服务器 尽管Twisted大多数情况下用来写服务器代码,为了一开始尽量从简单处着手,我们首先从简单的客户端讲起. 让我们来试试使用Twisted的客户端.源码在twisted-client-1/get-poetry.py.首先像前面一样要开启三个服务器: python blocking-server/slowpoetry…
作者:dave@http://krondo.com/your-poetry-is-served/ 译者:杨晓伟(采用意译) 你可以从这里从头阅读这个系列. 诗歌下载服务器 到目前为止,我们已经学习了大量关于诗歌下载客户端的Twisted的知识,接下来,我们使用Twisted重新实现我们的服务器端.利益于Twisted的抽象机制,接下来你会发现我们前面已经几乎全部学习到这部分知识了.其实现源码在twisted-server-1/fastpoetry.py中.之所以称其为fastpoetry是因为其…
python基础系列教程——Python3.x标准模块库目录 文本 string:通用字符串操作 re:正则表达式操作 difflib:差异计算工具 textwrap:文本填充 unicodedata:Unicode字符数据库 stringprep:互联网字符串准备工具 readline:GNU按行读取接口 rlcompleter:GNU按行读取的实现函数 二进制数据 struct:将字节解析为打包的二进制数据 codecs:注册表与基类的编解码器 数据类型 datetime:基于日期与时间工具…
python基础系列教程——Python中的编码问题,中文乱码问题 如果不声明编码,则中文会报错,即使是注释也会报错. # -*- coding: UTF-8 -*- 或者 #coding=utf-8 就行了 . 在第一行不区分大小写. 文档编码是一种告诉程序——无论是计算机的操作系统还是Python 代码——读取文档的规则.正确读取一个文档,往往需要先知道文件的扩展名,因为编码方式往往与扩展名有很大的关系. (1)纯文本文档的获取与处理:直接用urlopen读取后,用read()函数获取文本内…
python基础系列教程——Python库的安装与卸载 2.1 Python库的安装 window下python2.python3安装包的方法 2.1.1在线安装 安装好python.设置好环境变量后,在python安装目录下Script文件夹内会存在pip.exe和easy_install.exe两种在线安装工具. 只需要在cmd输入pip,可以查看pip是否可用 没有报错表示可用,在cmd中输入pip install xxx就可以在线安装包了,xxx为你要安装的包的名称.如在线安装numpy…
---恢复内容开始--- python基础系列教程——Python的安装与测试:python的IDE工具PyDev和pycharm,anaconda 从头开启python的开发环境搭建.安装比较简单,很多步骤就是直接next下来就可以,主要是配置好环境变量. 一. 如何安装Python 在https://www.python.org/下载安装包. 下载下来一个exe文件,直接双击运行. 选择Install Now,立即安装. 配置环境变量:右键开始——控制面板——系统——高级系统配置——环境变量…
191218-SpringBoot 系列教程 JPA 错误姿势之环境配置问题 又回到 jpa 的教程上了,这一篇源于某个简单的项目需要读写 db,本想着直接使用 jpa 会比较简单,然而悲催的是实际开发过程中,发现了不少的坑:本文为错误姿势第一篇,Repository 接口无法注入问题 I. 配置问题 新开一个 jpa 项目结合 springboot 可以很方便的实现,但是在某些环境下,可能会遇到自定义的 JpaRepository 接口无法注入问题 1. 基本配置 在 spring-boot…
前面两篇分别介绍了目前流行的模板引擎Freemaker和Thymeleaf构建web应用的方式,接下来我们看一下号称性能最好的国产模板引擎Beetl,如何搭建web环境 本文主要来自官方文档,如有疑问,推荐查看: http://ibeetl.com/guide/#beetl I. 准备 1. 依赖 首先我们是需要一个springboot项目,基本的pom结构大都相似 <parent> <groupId>org.springframework.boot</groupId>…
上一篇博文介绍了如何使用Freemaker引擎搭建web项目,这一篇我们则看一下另外一个常见的页面渲染引擎Thymeleaf如何搭建一个web项目 推荐结合Freemaker博文一起查看,效果更佳 190816-SpringBoot系列教程web篇之Freemaker环境搭建 I. 准备 Thymeleaf 是现代化服务器端的Java模板引擎,不同与JSP和FreeMarker,Thymeleaf的语法更加接近HTML,关于它的使用说明,可以参考官方文档 https://www.thymelea…
现在的开发现状比较流行前后端分离,使用springboot搭建一个提供rest接口的后端服务特别简单,引入spring-boot-starter-web依赖即可.那么在不分离的场景下,比如要开发一个后端使用的控制台,这时候可能并没有前端资源,由javaer自己来客串一把,我希望简单一点,前后端项目都集成在一起,一个jar包运行起来就完事,可以怎么搞呢? 本篇将介绍一下如何使用springboot集合freemaker引擎来搭建web应用 I. 准备 Freemaker是模板引擎,和jsp的作用差…