logging 模块误用导致的内存泄露

首先介绍下怎么发现的吧, 线上的项目日志是通过 logging 模块打到 syslog 里, 跑了一段时间后发现 syslog 的 UDP 连接超过了 8W, 没错是 8 W. 主要是 logging 模块用的不对 我们之前有这么一个需求, 就是针对每一个连接日志输出当前连接的信息, 所以每一个 连接就创建了一个日志实例, 并分配一个 Formatter, 创建日志实例为了区分其他连接 所以我就简单粗暴的用了当前对象的 id 来作为日志名称: import logging class...

comments

基于 Python 生成器的 Tornado 协程异步

Tornado 4.0 已经发布了很长一段时间了, 新版本广泛的应用了协程(Future)特性. 我们目前已经将 Tornado 升级到最新版本, 而且也大量的使用协程特性. 很长时间没有更新博客, 今天就简单介绍下 Tornado 协程实现原理, Tornado 的协程是基于 Python 的生成器实现的, 所以首先来回顾下生成器. 生成器 Python 的生成器可以保存执行状态 并在下次调用的时候恢复, 通过在函数体内使用 yield 关键字 来创建一个生成器, 通过内置函数...

comments

Python 入门指南

引子 经常能在 Python 群里看到很多新人在问一些非常基础的问题, 基本每天都在重复的问这些问题, 在这里就总结一下这些问题. 首先声明, 本文不打算教会你 Python, 本文力图陈列一些新手容易遇到的问题, 并企图教会你 如何学习 Python, 在遇到问题的时候如何提问. 关于版本 学习 Python 的第一步需要选择版本, Python 3.x 和 2.x 的断层较大, 3.x 不向后兼容 2.x. Python 现在主流应该还是 Python 2.7, Python 2.7...

comments

PyQt 中用 QtNetwork 异步发起HTTP请求

引子 最近有需求要在 PyQt 中请求一个链接, 因为比较简单直接用 urllib2 处理了, 但是 urllib2 在 有延时的时候会造成 GUI 界面卡死. 所以今天研究研究 QtNetwork 模块. QtNetwork 中的请求在 PyQt 中都是异步的. 简单的请求 QHttp 发起一个GET请求 PyQt4.QtNetwork.QHttp 可以发起一个简单请求, 需要注意的是这个对象需要通过调用 setHost 设置请求主机, 然后 调用 get/post 传入 path...

comments

Tornado 多进程实现分析

引子 Tornado 是一个网络异步的的web开发框架, 并且可以利用多进程进行提高效率, 下面是创建一个多进程 tornado 程序的例子. #!/usr/bin/env python # -*- coding:utf-8 -*- import os import time import tornado.web import tornado.httpserver import tornado.ioloop import tornado.netutil import...

comments

记一次 zsh 产生僵尸进程解决

问题描述 今天使用 vmplayer 运行了 xp 系统, 关闭后在 zsh 里继续敲命令就阻塞了, 然后就关闭了终端重新打开, 还是阻塞, 重复几次依然如此. 然后使用 gVim 将 shell 切换到 bash, 终端可以正常打开, 然后运行 $ ps aux | grep zsh wh 27552 0.0 0.1 47244 5164 ? Ss 09:38 0:00 zsh wh 27553 0.0 0.1 47244 5156 ? Ss 09:38 0 …

comments

解决一直崩溃的 Adobe Flash Player

1月份的时候决定从 Ubuntu 换到 Archlinux, 换完之后 Flash Player 就一直没正常过. 一打开视屏就 crash. 从那之后就一直用手机看视屏, 很别扭, 放着大屏不用一直盯着手机看看. 今天下定决心找找原因. google 了一阵也没有啥结果, 所以我决定卸载现有的, 手动安装一个试试. $ sudo pacman -R flashplugin 结果卸载的时候输出段信息: warning: /etc/adobe/mms.cfg saved as...

comments

使用 Pygments 对 Vimwiki 进行代码高亮

Vimwiki 推荐的代码高亮机制是通过一个 JavaScript 插件来完成的, 那样需要加载很多 js, 所以不想使用, 比较倾向使用 Pygments 在 Vimwiki 生成 HTML 的时候对代码进行高亮. 尝试 使用 custom_wiki2html 选项 仔细的看了 Vimwiki 的帮助文档, 发现有一个 custom_wiki2html (:h vimwiki-option-custom_wiki2html) 的选项可以指定自己 的脚本来处理 wiki2html,...

comments

使用 Vimwiki + git 做知识管理

一直在找一个合适的知识管理工具, 用过 Evernote, 但是不支持 Markdown, 用了一段时间也放弃了. 最近 python-cn 列表里也在讨论这个问题, 看到有人使用 Vimwiki, 所以就尝试了一下. 安装后,试着写了点东西, 发现很方便做知识管理和记录笔记, 可以生成HTML, 可以定制模板, 这里不讨论如何使用, Vimwiki 的文档介绍的很详细, 我使用bootstrap和 jquery 对模板进行了一些定制: 添加导航 将toc移动到左侧...

comments