Archive for python

开始想用python做一个键盘记录的工具,搜索linux keyboard hook,发现找不到东西。后来发现原来linux直接读设备文件就行了,才恍然大悟。 /dev/input/下有十多个event。要找到键盘对应的event,查看grep keyboard /proc/bus/input/devices -A 12。 然后找到一点资料,自己写了一段程序: <pre lang="python"># coding: utf-8 import os import struct fmt = "llHHI" size = struct.calcsize(fmt) filename = "/dev/input/event3" fd = os.open(filename, os.O_RDWR) while 1: op = os.read(fd, size) timeval, suseconds, typ, code, value = struct.unpack(fmt, op) print typ, code, value</pre>

Continue

啃了python源代码,从python.c开始慢慢看到token获取,学到很多东西,但是我看到python源代码也有很多可以优化的地方。很多参数、变量可以不要的,同样的判断在不同地方使用的不同方法,我靠看的我晕头转向。一到晕头转向的时候,我就重新从有疑问的地方再走一遍,认真看关键代码,然后才能看懂这一部分的功能。 语言的基本语法想个差不多了,天马行空了一下,与开始想的差距太大。

Continue

不定义的话默认差不多有一分钟,具体不知道 一种方法:engine = sqlalchemy.create_engine(db_connect_str, connect_args={'connect_timeout': 10}) 还可以直接写到db_connect_str后边,connect_args就是连接字符串后面跟的参数。 <pre><code>"mysql://user:password@host/test?connect_timeout=1"</code></pre>

Continue

写的dht协议搜索的程序,这几天优化了一下发现速度确实快了好多。但是出现了一个新的问题,内存直接飙升,我开了十个爬虫占用内存800m。开始我以为是节点太多了,找了几个小问题修改一下,发现没用。后来就到网上查找python内存分析的工具,查了一点资料发现python有个meliae库操作非常方便,就使用分析了一下,发现不是节点太多的原因0 0,是保存发送的t_id,用来标示返回的消息是那个发出的一个字典过大了。 从分析的结果非常容易的定位了某个对象的数量和大小,非常容易分析。我开始以为是因为好多发送查询信息以后,对面没返回造成这个字典里的元素没有释放造成的,我就用过期时间判断了一下,进行过期删除。发现是小了,但是不是非常显著,好像少了几十不到100M。后来又减少了查找一个随机hash的时间,以前是1分钟查一次,我改成了就第一次查!,发现没减少0 0.不知道是啥的原因。应该就是查找hash,询问节点,然后返回然后询问里边的节点,最后数量越来越多,但是我不明白的是,怎么会这么多运行一分钟就有60万条。也就是说当时内存没释放的对象就有这么多。达到这个内存占用后,基本就不再变化,有很小很慢

Continue

今天在网上看到type的一段代码 ,然后查了一下文档,才知道type还有三个参数的用法。 http://docs.python.org/2/library/functions.html#type 以前只是知道type可以检测对象类型。然后发现了一个有趣的用法。 def println(self): a = 1 + 1 print "%s,%s" % (self.aa, a) A = type('A',(),{'aa':'print a', 'println': println}) a = A() type(a) Out[11]: __main__.A a.println() print a,2 第一个参数是类的名字,第二个元组是父类,第三个是属性。 哈哈,我觉得很好笑,虽然我函数里边第一个参数还是写的self,但是如果写一段代码都用这种方法定义类,然后再不注意类名的规范,代码会变的很难读。

Continue

从看了小虾的博文以后就也想写一个爬虫,一直写到现在才有点眉目。。其中还参考了http://codemacro.com上写的思路,不过有很多功能还没涉及到。 已经实现的功能,创建一个节点,能在dht网络中友好的生存并获取info_hash,好多技巧还没用到。实现插入数据库中,现在直接访问django写的应用(主要也是测试功能,两个功能分开了还没合到一起,直接用django的orm肯定要快好多),然后我在django里边写了下载种子文件和解析种子文件信息的功能。发现有许多hash找不到种子,下载不下来,后面还要在看一下怎么生成种子文件。分析种子信息的代码是从网上找的,然后修改了一下。 一个节点可能有点偏,不计算重复,开始时平均一分钟2个,计算重复一份钟一个。 前段时间又想到以前看群里讨论的关于p2p的应用,想自己实现一下,正好现在对协议了解了。不准备用 python写了,再看一个新语言折腾一下。 <a href="http://0x55aa-wordpress.stor.sinaapp.com/uploads/2013/10/2013-10-05-204716的屏幕

Continue

1.按照zeromq。下载地址:http://download.zeromq.org/ 官方文档 http://zeromq.org/area:download#toc4 2.安装pyzmq。easy_install pyzmq &nbsp; 不错的例子:https://learning-0mq-with-pyzmq.readthedocs.org/en/latest/index.html &nbsp; 我用的pair-pair模式,虽然我只要单向传递消息,这种模式不会产生消息丢失。我开始使用pub-sub模式,发现不知道什么原因,第一个消息总会丢失。。。这种模式是最快的,然后决定不使用了。但是使用pair模式存在的问题是,如果接收端的服务没启动,就会阻塞在那里,会产生timeout。

Continue

执行系统命令一般都是os.system(),但是我想返回编译c语言程序的结果,找到一个os.popen()发现不行,又找到一个<code>commands.getoutput成功解决了。</code> 官方文档: http://docs.python.org/2/library/subprocess.html#module-subprocess

Continue

参考资料: http://eshlox.net/en/2012/09/11/nginx-uwsgi-virtualenv-and-django-ubuntu-1204/ https://virtualenv-chinese-docs.readthedocs.org/en/latest/ https://uwsgi.readthedocs.org/en/latest/tutorials/Django_and_nginx.html http://www.virtualenv.org/en/latest/ 在virtualenv环境下安装 mysqldb的时候遇到几个问题 $ sudo apt-get install libmysqlclient-dev $ sudo apt-get install python-dev &nbsp; 把第一个链接的文章转过来,防止以后不能访问,其他几个都是官方文档,主要还是参考官方文档。 First install required applications. <div> <pre>sudo

Continue

下载了tornado 0.1的代码进行学习,之所以选择tornado,是看网上对非阻塞模式评价很高,他也不仅仅是web框架,而且相对django来说代码少多了(django的代码也有看)。选择0.1的原因还是代码相对简单,差别也不大。 查看demos里的helloworld,代码如下: <pre lang="python">import tornado.httpserver import tornado.ioloop import tornado.options import tornado.web import logging from tornado.options import define, options define("port", default=8888, help="run on the given port", type=int) class MainHandler(tornado.web.RequestHandler): def get(self): self.write("Hello, world")

Continue