Category Archives: Python

Python压缩Sqlite3数据库

Sqlite3的数据库,在删除数据时并不会回收空间,因此Sqlite3提供了一个特殊操作:VACUUM,调用它,我们可以压缩数据库。
当然,在Python中压缩也是非常简单的。

[python]
def compact_sqlite3_db():
try:
conn = sqlite3.connect(SQLITE_FILE)
conn.execute("VACUUM")
conn.close()[......]

继续阅读

关于gevent的Timeout(超时)问题……

真的是内牛满面啊,虽然4个月前就开始用gevent,但是直到今天才知道到底怎么才能设置gevent(含monkey打patch后)的超时!!

官方文档太坑爹了,在很隐藏的一个角落里才发现这么一个类gevent.Timeout。

事情是这样的:我们常用的socket都是阻塞的,那么超时是很好设置的。但是,用过Linux下非阻塞I/O的都知道,非阻塞情况下,设置连接超时神马都是浮云的,因为人家是非阻塞的……

于是,当我们用monkey.patch_all()之后,所有的socket[......]

继续阅读

关于gevent的微线程“eventlet”同步问题

理论上讲,Python是不存在线程安全问题的,由于GIT么,但是这是有前提的:sleep,I/O导致的wait都可能会引发线程安全隐患。

同理,gevent是基于事件驱动模型的,就不太可能是线程安全的。

gevent.coros.Semaphore提供了信号量的功能,可以是n个哦!

semaphore.acquire() -> 获取“锁”
semaphore.release() -> 释放“锁”

gevent的文档写的真简介啊,于是测试了个基本的同步方法:同[......]

继续阅读