Python 的类型系统

Thumbnail

image from pixabay.com 静态类型正在逐渐成为潮流, 2010 年之后诞生的几门语言 Go、Rust、TypeScript 等都走了静态类型路线。 过往流行的一些动态语言(Python、PHP、JavaScript)也在积极引入语言新特性(Type Hint、TypeScript)对静态类型增强。 我曾使用 Python 开发规模较大的项目,感受过动态语言在工程规模变大时候带来的困难: 在重构阶段代码回归成本异常之高,很多历史代码不敢动。 后来技术栈转到 Java,被类型系统怀抱让人产生安全感。 ...

2020-06-23 · alswl

在 Python 中使用 GDB 来调试[译文]

大约一年前,我接触了 Java 中的 Btrace 能够不停机查看线上 JVM 运行情况的特性让我艳羡不已。 另外还有强悍的 jStack 和 jConsole 来进行运行期侦测,JVM 的工业级强度果然不是盖的。 当时公司技术方面也遇到了一些瓶颈,一部分原因是 CPython 本身的 IO 模型问题, 另一方面也和早期代码写的极不工整脱不了关系。万般无奈之下,我们用 Jython 推翻重做了主要业务,效果立竿见影,但同时也把真实问题给规避掉了。 在这之后我们在 JVM 的领导下,走上了康庄大道。但我心中始终还有一个梗, 就是想对性能遇到瓶颈的 Python Process 进行线上侦测。 这篇文章就是开始的第一步。 ...

2013-11-01 · alswl

在 Python 中使用 epoll[译文]

原文地址: http://scotdoyle.com/python-epoll-howto.html , 我这里取精简内容翻译过来。 ============ 正文开始 ============ 介绍 Python 从 2.6 开始支持 epoll。现在我们用 Python3 来写基于这些 API 的 epoll 范例。 阻塞的 Socket 通信范例 import socket EOL1 = b'\n\n' EOL2 = b'\n\r\n' response = b'HTTP/1.0 200 OK\r\ndate: "2013-01-12T00:01:00+08:00" response += b'Content-Type: text/plain\r\nContent-Length: 13\r\n\r\n' response += b'Hello, world!' serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) serversocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) serversocket.bind(('0.0.0.0', 8080)) serversocket.listen(1) try: while True: connectiontoclient, address = serversocket.accept() request = b'' while EOL1 not in request and EOL2 not in request: request += connectiontoclient.recv(1024) print('-'*40 + '\n' + request.decode()[:-2]) connectiontoclient.send(response) connectiontoclient.close() finally: serversocket.close() 这个范例中的代码在 accept() 、 recv() 和 send() 时候会发生阻塞, 导致其他连接无法完成。 通常情况下,在我们使用阻塞模型时候,会专门建立一个主线程来进行监听, 将建立成功的连接交给其他线程操作,然后继续在主线程上面监听。 这样一来,就不会受单次请求阻塞的限制。 C10K 问题描述了其他处理高并发方法,比如异步 Socket, 通过监听事件来触发预设的响应。异步 Socket 可以是单线程,也可以是多线程。 ...

2013-01-12 · alswl

如何让 Instagram 在一百多万用户爆炸后稳定运行

原文链接:Keeping Instagram up with over a million new users in twelve hours 这周二我们发布了 Instagram for Android,反响空前强烈。 最近这几周我们一直(在基础设施方面)做负载计划,为所有可能发生的事故做准备。 尽管如此,在发布那天,最大的挑战仍然是如何快速定位问题,找到瓶颈并尽快修复他们。 在这里我们将分享一些帮助我们解决问题的工具和技术。 ##statsd## statsd 在 Instagram 很受欢迎。这是 Etsy 写的一个网络监控器, 能够统计并图形化数据。它有两种核心的统计方式:计数器和计时器。 我们用计数器来跟踪许多信息,从每秒钟注册数到喜欢数量统计。 同时我们使用计时器来跟踪 feeds 变化,用户停留在 feeds 多久,和其他的主要操作。 ...

2012-11-19 · alswl

KuKu-一个 Weekend Project

Thumbnail

一个小小的 Weekend Project,基于 web.py。 代码在 alswl / kuku ,很简陋,属于差不多能用阶段。 基于以下原因开发: 想把服务器去 PHP 化,以前的 upload.log4d.com 是基于 PHP 的, 详情请见 使用独立图床子域名。 刚买的 Linode VPS,终于从 128MB 内存解放出来了,赶紧放个 Python 程序跑跑。 想些 Python 了,手痒,想看看写这么简单的功能需要多长时间, 弥补上次没能参加黑客马拉松的遗憾。 KuKu 的发音是我家乡话的「看看」。 KuKu 中比较有趣的地方是,用了 Foundation 这个流式 Web 前端框架, 用了 Foundation Icons Fonts,将 js 库全部托管在 Google Hosted Libaries 和 cdnjs 上。 这篇文章我看着都觉得水。 ...

2012-11-18 · alswl

PyCon 2012 见闻

Thumbnail

PyCon 是 Python 领域最著名的技术会议,从 2011 年开始,中国区开始举办自己的 PyCon 大会。这次 PyCon 2012 分成两个场地同时进行,北京和上海, 并且在网上提供同步转播,各地也有组织线下收看的。 去年时候我很遗憾的不能跑到上海来参加,现在我人就在上海, 怎能错过 Pythoner 的饕餮大餐呢?早就眼巴巴的买票准备参加了。 上海这边的主题如下: 《Python 产品构建与发布指南》- 沈崴 《实战游戏客户端》 - 林伟 《让程序运行更快》- 李小红 《演进或革命 - 选型和架构的实践经验谈》 - 潘俊勇 《网游开发中的 Python 组件》- 赖勇浩 《自动化即时战斗游戏解决方案》 - 王健 《人人可以化半小时开发一个全功能OpenERP模块》 - Tony Gu 《元编程在redis orm中的应用》 - 许智翔 《OpenERP即将推出的第7版的功能和新的编程框架介绍》- Eric Caudal 《Python如何帮助「逆转三国」获得成功》- 车蕙怡 《Pyramid Web Framework for Advanced Web Applications》- 黄峥峼 (Mark Huang) 《用Tornado开发RESTful API应用》- 飞龙非龙 《NOSQL和MySQL在django上的混合使用》- 黄昶 《网页游戏的跨界开发》 - 董诣 《阿里云之移动开发者上云》 - 刘飞 《使用 Python 和 Django 建设维护学校门户》- 于夏桥 《python在linux运维中的应用》 - 吴晗 《用Python替换C代码——A Python Successful Story》- Adieu(刁立知) 《 Python in Gentoo Linux》- Patrick Lauer 《基于nova的自动扩展和负载均衡》- 刘明华 《用myTestCase模块来做python的UT》- 陈钢 我最喜欢的是 许智翔(shell) / 沈崴 / 林伟 / 黄峥峼 / 李小红 / 赖勇浩 的 Topic。其中尤其是沈崴关于输入处理的准则,解开我一个很久的疑惑。 沈崴这个 Python 编程艺术 是赖勇浩提到的幻灯片,强烈推荐观看。 ...

2012-10-21 · alswl

Working with Python subprocess[译文]

Thumbnail

8月底到魔都开始新工作,头一个月当然各种忙,都没时间来更新博客。 这篇文章是在写 Btrace 脚本时候查资料看到的, 看着不错就顺手翻译,没想到差点烂在草稿箱出不来啊出不来。 熬了一个月才磨出来,媳妇都快成婆了有木有。 原文链接:Working with Python subprocess - Shells, Processes, Streams, Pipes, Redirects and More 注意 关于「执行命令时候发生了什么」这个问题,可以在 http://en.wikipedia.org/wiki/Redirection_(computing) 找到更多最新信息。这篇文章遵循 GFDL 协议。 在我的上一篇日志中,我写到如何 build a command line interface with sub-commands in Python。 这次我来尝试如何通过 Python 的 subprocess 模块来和命令行指令进行交互。 ...

2012-10-16 · alswl

MoinMoin Wiki 转换 Text 脚本

我使用 MoinMoin 作为我的 KMS,具体使用方式可以参考 [使用MoinMoin作为个人KMS][moin-kms]。另外,我将 MoinMoin 的 data 目录链接到 Dropbox 同步目录下面,从而可以备份并查看我的知识库。 我想同步阅读 KMS 数据 想在移动设备阅读 KMS 数据时,我遇到一个麻烦,MoinMoin 使用文件来保存 wiki 数据, 比如「28个Unix.Linux的命令行神器」这篇 wiki 目录在 data/28(e4b8aa)Unix(2e)Linux(e79a84e591bde4bba4e8a18ce7a59ee599a8) 中, 结构如下: |---revisions | |---00000002 | |---00000001 |---edit-log |---current |---attachments | |---http___coolshell.cn_wp-content_uploads_2012_07_xargs_screenshot.png | |---http___coolshell.cn_wp-content_uploads_2012_07_sl.jpg | |---http___coolshell.cn_wp-content_uploads_2012_07_mtr_screenshot.png | |---http___coolshell.cn_wp-content_uploads_2012_07_lftp_screenshot.png | |---http___coolshell.cn_wp-content_uploads_2012_07_htop_screenshot.png | |---http___coolshell.cn_wp-content_uploads_2012_07_calcurse_screenshot.png | |---http___coolshell.cn_wp-content_uploads_2012_07_multitail_screenshot.png | |---http___coolshell.cn_wp-content_uploads_2012_07_ack_screenshot.png | |---http___coolshell.cn_wp-content_uploads_2012_07_tpp_screenshot.png | |---http___coolshell.cn_wp-content_uploads_2012_07_powertop_screenshot.png | |---http___coolshell.cn_wp-content_uploads_2012_07_newsbeuter_screenshot.png | |---http___coolshell.cn_wp-content_uploads_2012_07_socat_screenshot.png | |---http___coolshell.cn_wp-content_uploads_2012_07_siege_screenshot.png | |---http___coolshell.cn_wp-content_uploads_2012_07_duplicity_screenshot.png | |---http___coolshell.cn_wp-content_uploads_2012_07_ipbt_screenshot.png | |---http___coolshell.cn_wp-content_uploads_2012_07_iftop_screenshot.png | |---http___coolshell.cn_wp-content_uploads_2012_07_curl_screenshot.png | |---http___coolshell.cn_wp-content_uploads_2012_07_iptraf-tcpudp.gif | |---http___coolshell.cn_wp-content_uploads_2012_07_vim_screenshot.png | |---http___coolshell.cn_wp-content_uploads_2012_07_earthquake.jpg | |---http___coolshell.cn_wp-content_uploads_2012_07_tmux3.png | |---http___coolshell.cn_wp-content_uploads_2012_07_cowsay_screenshot.png | |---http___coolshell.cn_wp-content_uploads_2012_07_TaskWarrior2.0.png | |---http___coolshell.cn_wp-content_uploads_2012_07_vifm_screenshot.png | |---http___coolshell.cn_wp-content_uploads_2012_07_taskwarrior_screenshot.png | |---http___coolshell.cn_wp-content_uploads_2012_07_linuxlogo.jpg | |---http___coolshell.cn_wp-content_uploads_2012_07_ranger.png | |---http___coolshell.cn_wp-content_uploads_2012_07_nethack_screenshot.png | |---http___coolshell.cn_wp-content_uploads_2012_07_rtorrent_screenshot.png | |---http___coolshell.cn_wp-content_uploads_2012_07_dtach+dvtm.png | |---http___coolshell.cn_wp-content_uploads_2012_07_gnu_screen_screenshot.png | |---http___coolshell.cn_wp-content_uploads_2012_07_ledger_screenshot.png | |---http___coolshell.cn_wp-content_uploads_2012_07_rsync_screenshot.png | |---http___coolshell.cn_wp-content_uploads_2012_07_byobu-tmux.jpg | |---http___coolshell.cn_wp-content_uploads_2012_07_ttytter_screenshot.png |---cache | |---text_html | |---pagelinks 可以看到,中文名称的 wiki 在存储时候,MoinMoin 会将中文保存为 utf-8 码, 不能直接阅读。并且我需要将目录下面有多级目录,阅读麻烦。 ...

2012-07-27 · alswl

GAE 编程指南读书笔记

GAE 和我蛮有缘分,我初学 Python 的其中一个原因就是当时 GAE 刚推出, 当时想法是免费的应用要用起来,要不然就浪费了。随后也假模假样的看文档, 就是没有什么产出。 去年写了一个小应用 dbevent2gc , 期间发现 GAE 和普通程序开发的诸多不同,又遭遇 GAE 配额大幅缩水, 写出来的应用运转的不太稳定。在南京图书馆的架上看见这本《GAE 编程指南读书笔记》, 立即借回家仔细阅读。 GAE 的简介 运行时环境 Python / Java 数据存储 Datastore(实体 / 查询 / 索引 / 事务) 服务(Memcache / GAccount / 任务队列 / 计划任务) 工具(SDK / appcfg / dev_appserver / 控制台) 入门(安装 / GAccount / webapp / app.yaml / /_ah/admin / 注册部署 / login:required) ...

2012-03-24 · alswl

在Python中调试代码

撰写程序时候,需要在调试上面花费不少时间,好的调试工具可以让这个过程如虎添翼, 靠打 log 调试会是一种很痛苦的过程,我总结一下 Pylons 开发的调试技巧。 吐槽:团队开发时候,每个成员需要学习、总结和分享各自的开发技巧, 这样才能自我提升并提高开发效率。这属于团队文化建设,开发是一种艺术创造过程, 绝对不是简单的复制和粘帖。 在 Python 中调试 pdb 在代码中加入下列语句即可启用交互式调试。 import pdb;pdb.set_trace() 在 pdb 中,可以使用 h / l / b / n / s / c / j / a / p / ! / q 这些命令所代表的含义可以通过 h(elp) 打印出来。 ...

2012-03-20 · alswl