代码改变世界

随笔档案-2013年08月

urllib2 源码小剖

2013-08-25 23:38 by 捣乱小子, 2472 阅读, 收藏, 编辑
摘要: 两篇小剖已经完成:urllib 源码小剖urllib2 源码小剖urllib2 对 urllib 改进了好些,整个思路都改了,变得更加灵活,有“高内聚,低耦合”的味道。看看 urllib2 的新特性:将对 url 的处理单独成一个 request 类URLopener 和 FancyURLopener 都下架,取而代之的是 OpenerDirector另添加了 N 多 handlers,这些 handlers 主要对 HTTP 连接,HTTP request 或者 HTTP response 的处理,譬如往 HTTP request 中添加几个特定的 cookies 或者状态码处理,所有你能想 阅读全文

urllib 源码小剖

2013-08-25 11:49 by 捣乱小子, 1744 阅读, 收藏, 编辑
摘要: 两篇小剖已经完成:urllib 源码小剖urllib2 源码小剖urllib 是 python 内置的网络爬虫模块,如果熟悉 python 一定能很快上手使用 urllib。写这篇文章的目的是因为用到了它,但因为用的次数较多,又或者是具体的需求,有必要深入去理解内部的工作方式。最简单的使用urllib 最简单的使用,我也从下面的语句中开始:import urllibparams = urllib.urlencode({'spam': 1, 'eggs': 2, 'bacon': 0})f = urllib.urlopen("http:/ 阅读全文

两种高性能 I/O 设计模式 Reactor 和 Proactor

2013-08-22 15:10 by 捣乱小子, 25836 阅读, 收藏, 编辑
摘要: Reactor 和 Proactor 是基于事件驱动,在网络编程中经常用到两种设计模式。曾经在一个项目中用到了网络库 libevent,也学习了一段时间,其内部实现所用到的就是 Reactor,所知道的还有 ACE;Proactor 模式的库有 Boost.Asio,ACE,暂时没有用过。但我也翻阅了一些文档,理解了它的实现方法。下面是我在学习这两种设计模式过程的笔记。ReactorReactor,即反应堆。Reactor 的一般工作过程是首先在 Reactor中注册(Reactor)感兴趣事件,并在注册时候指定某个已定义的回调函数(callback);当客户端发送请求时,在 Reactor中 阅读全文

程序处理已排序数据为什么比未排序的快?

2013-08-18 09:23 by 捣乱小子, 1303 阅读, 收藏, 编辑
摘要: sof 上的帖子,原文链接:Why is processing a sorted array faster than an unsorted array?.在RabbitOverCarrot有更多的内容。下面是翻译正文:问题描述:下面的 C++ 代码,执行结果很诡异。不知道为什么,已排序的数据居然能神奇的让这段代码的执行速度提升六倍之多:#include #include #include int main(){ // Generate data const unsigned arraySize = 32768; int data[arraySize]; for (un... 阅读全文

前向代理和反向代理

2013-08-04 17:27 by 捣乱小子, 3982 阅读, 收藏, 编辑
摘要: 第一次接触代理是在大二计算机网络课堂中,通由代理服务器可以让网络访问更具伸缩性,可以拒绝访问某些网站和协助访问被和谐的网站。最近无意中接触了反向代理,有对比正好有机会可以搞清楚前向代理和反向代理着两个概念。前向代理一般提到的是前向代理。表面上客户端 C 可以直接访问服务器 S,但实际上 C 在访问 S 的时候经过了中间的另一个中间的服务器 M,M就是代理服务器。为什么说是前向代理?因为前向代理是面向客户端的,而不是服务器。M 接收了 C 的请求后,(有选择的)对请求进行简化或者其他处理,再向目标服务器请求数据。C-------------M-------------S前向代理对请求进行简化或者 阅读全文