HTTP 协议发展变迁
这篇文章介绍了 HTTP 协议关于传输方式上的重大改变。HTTP 协议 是基于 TCP/IP 协议的关于内容请求和传输的标准。HTTP/0.9 的请求只有一行,使用 GET /index.html
这样的请求,响应只能返回 HTML 内容然后关闭 腾出连接,请求和响应都没有header。HTTP/1.0 也是在响应完后关闭连接。一个缺点是在 TCP 三路握手客户端最后一个 ACK 到达服务器前服务器无法处理请求;一些 HTTP 实现定义了 Connection: keep-alive
来告诉服务器不要关闭连接,客户端还要用。HTTP 还是一个无状态的协议,所以客户端在每个请求都需要自己携带信息以告知服务器其所在状态,重复的信息会到达服务器很多遍。HTTP/1.1 默认响应结束不关闭 tcp 连接除非带上了 …
使用 IPython 作为系统 Shell
IPython 其实也可以做系统 Shell。默认加载的 Profile 就附带了很多功能。例如:
%env foo
可以查看环境变量$foo
的值;%env foo=bar
可以设定环境变量$foo
的值为bar
;%env foo=$bar
可以设定环境变量$foo
的值为另一个环境变量$bar
的值。- 运行
%rehashx
之后可以加载 Shell 里你之前设定过的 alias。 - 运行
!your-cmd
(例如!ls /tmp
) 可以运行 Shell 命令,除了!cd /path/to/dir
不能真的跳到那个目录。 - 对于调目录,如果 …
简单函数无需安装库
NPM 社区曾经出过一个很大的事故:一个人因为商标原因撤下了自己写的几十个包,其中一个包只有一行源代码却是无数 nodejs 项目的依赖。当时各大厂的项目的构建都因此挂了。例如一个项目有四十个 NPM 包,包还依赖别的包,解析后会有上千个包。事故中的那个包只有一行代码,但却需要下载好几K的数据,包括了证书,元信息等等。上千个包下载到本地需要不少时间,也需要不少硬盘空间。这个事故还引出的问题是代码依赖过多引来了非常多的法务风险(证书)和安全/审计风险。万一作者在包里面暗戳戳地加了后门呢?万一作者帐号被黑客盗走了呢?万一作者的 Key 不小心泄漏了呢?其实像一些简单的工具函数,简单的 Copy/Paste 才是更经济的选择。
read more文档阅读 - Python queue
Python Queue
模块是为生产者-消费者模型而设计的。在多线程的场景里,我们需要有一个线程安全的手段将信息在线程之间交换。基本上这个模块基于 threading 模块,做了一些锁的操作。这个模块有 Queue
(FIFO), LifoQueue
(LIFO), PriorityQueue
(小值最优先) 三种队列。它设计了几个简单的 API:我们可以通过 put 放个 Python 对象进去,然后使用 get 取出来。get 对象出来时,如果用 get(block=True)
那么操作会堵塞直到有对象取出来;如果用 get(block=True, timeout=3)
那么操作会堵塞三秒直到有对象取出来,否则抛异常 Empty。取出来的对象用 .task_done()
标记取出来的对象处理完了。我们可以用 .qsize()
看队列长度 …