werkzeug源码分析(local.py)

发布在 Flask

有人说flask的上下文机制是整个框架的精华部分,有人说它神奇的g让人费解。werkzeug的local.py就是它的具体实现。这个看似神奇的机制背后加上应用代码也不过两三百行。不过好像坑还是比较深的。另外flask的0.1版本才200多行代码。值得瞅一下

阅读全文

刚转行第一次IT面试的时候面试官问我,list和dict是不是线程安全的。当时我就想,擦嘞,作为一个初学者list和dict不是线程安全的都看了N遍啦。这还有疑问么~~~,现在想想并没有抓住重点,线程安全应该针对于具体的操作,而不是具体的对象,我们说Queue是线程安全的是因为针对它的所有操作都是线程安全的。

阅读全文

Flask这个人人称赞的微框架就是构建在werkzeug之上,werkzeug给自己的定位就是工具集合。它实现了wsgi server、Requests/Response封装、DEBUG、热重启、路由控制以及其他的一些辅助功能。接下来的几篇文章会从一些大的方面去分析它。本篇如标题:D

阅读全文

前些天用的好好的airdrop居然无法使用了。具体情况是:我有iphone、ipad、mac。iphone和ipad能够互相发现。mac对它们2个发现不了。妈蛋正要传资料可急死我了。网上一搜这种情况还不在少数。

遇到这种情况。可以打开about this mac→→system report查看Network(wifi)可以看到Country Code:是不是CN(我电脑有问题的时候是X3)。如果不是,那么无法使用airdrop就和它有关。至于如何修复这个问题我没有找到确切的办法.有一个原因可能是由于路由器造成的。这个可以打开系统自带的无线检测工具Wireless Diagnostics(Windows→→scan)查看是不是由于国家码冲突造成的(详情看第一个参考资料)。如果这里没有问题(我的不是这个问题)。。。。。那么请尝试执行以下操作

  1. 将操作系统的语言改成中文
  2. 在系统设置页退出icloud账号
  3. 重启系统


    尼玛,有可能就暂时能正常使用了ヾ(。`Д´。)

参考资料

how-to-fix-conflicting-country-codes-and-improve-your-macs-wi-fi
解決無法從 iPhone AirDrop 到 Mac 的方法

评论和共享

pycallgraph源码分析

发布在 源码解析

用来生成函数调用图,这个工具可能名气比较大。因为看介绍就能看到好像可以生成比较帅气的图像。从源码层面看。其实这个工具是相当简单的,就是使用了sys.settrace接口,该接口常用于debug、profile(本文环境python3.5.1)。

阅读全文

使用pyenv install 3.5.0的时候直接去python.org官网下载源码进行编译。速度几kb每秒慢到无法自理。无奈用代理速度也不怎么样。再其次该项目的作者是自己写了一个pyenv镜像项目的,只可惜更新频率远不如pyenv。导致安装一些新的版本无法使用公共代理

如果安装2.7.6你可以选择使用国内七牛的镜像。项目地址http://pyenv.qiniudn.com/pythons/。执行

1
2
export PYTHON_BUILD_MIRROR_URL="http://pyenv.qiniudn.com/pythons/"
pyenv install 2.7.6

就会使用七牛镜像进行下载速度非常快。
缺点就是除了网页上的一些版本。其他的都不支持了。七牛没有对这个项目进行更新

我们可以用迅雷或者其他可用的快速的方法把python源码下载到本地。自己开启一个镜像给自己用。这样就好了。比如执行

1
2
3
ficapy@L ~> pyenv install 3.5.0                                                                                                                                                                           
Downloading Python-3.5.0.tgz...
-> https://www.python.org/ftp/python/3.5.0/Python-3.5.0.tgz

然后把https://www.python.org/ftp/python/3.5.0/Python-3.5.0.tgz下载到本地。
再设置镜像地址export PYTHON_BUILD_MIRROR_URL="http://127.0.0.1:8000/"
到下载地址执行python3 -m http.server
再次执行pyenv install 3.5.0发现还是从官网下载。不过此时查看http.server上有一条HEAD请求日志。-_-发现不是直接请问的文件名,而是一个64位的字符。将下载的文件名修改成那64位字符。在执行就ok了~~

评论和共享

个人认为python中描述符协议是一个比较神奇的存在,是因为如果你不去了解property的内部实现,没有深究别人写的__set__、__get__方法。或许写python很多年都对这个东西没什么了解。然而这玩意儿有时候真的挺好用的。本文不会详述描述符协议。会着重讲一个小例子。如果以前没有接触过描述符,请依次查看文末相关资料的两篇文章

阅读全文

wsgiref源码阅读

发布在 源码解析
 _ _ _ ____ ____ _ ____ ____ ____    _ _  _ _  _ ____ ____ _ ___
 | | | [__  | __ | |__/ |___ |___    | |\ | |__| |___ |__/ |  |
 |_|_| ___] |__] | |  \ |___ |       | | \| |  | |___ |  \ |  |
+--------------------------+     +---------------------------------+
|    wsgiref.WSGIServer    |     |   wsgiref.WSGIRequestHandler    |
+--------------------------+     +---------------------------------+
              |
+-------------v------------+    +------------------------------------+
|  http.server.HTTPServer  |    | http.server.BaseHTTPRequestHandler |
+--------------------------+    +------------------------------------+

+--------------------------+    +------------------------------------+
|  socketserver.TCPServer  |    | socketserver.StreamRequestHandler  |
+--------------------------+    +------------------------------------+
                                        overload handle logic

Created with Monodraw

dd

评论和共享

http.server源码阅读

发布在 源码解析

上一章讲SocketServer模块,它将服务端根据监听套接字和连接套接字分为了2个部分(BaseServer/BaseRequestHandler),而连接套接字类的处理方法相当简单,最终是一个handle函数就搞定了。http.server这个模块主要类BaseHTTPRequestHandle继承自BaseRequestHandle,对handle进行了一点点的加强,主要就是对http协议进行了简单的解析工作(源码版本Python3.5)

阅读全文

SocketServer.py这个文件700来行,除去注释大概300来行左右,据网友称该模块实乃学习类继承之典范。
要理解这个模块真的非常的简单,也让人体会到同步编程的简单性。另外我现在比较关注web编程,所以会比较关注tcp部分忽略掉udp(源码版本Python2.7.11)

阅读全文

ficapy

author.bio


author.job


深圳