李迎辉

李迎辉的博客

他的个人主页  他的博客

lockfile 模块

李迎辉  2009年08月26日 星期三 12:58 | 1833次浏览 | 2条评论

通过对文件加锁来实现应用级别的锁机制是session处理中很重要的一环。当然并不是所有的session模块都使用这种方式,而且在涉及到集群时还是存在问题。不过在通常情况下的确够用了。那么在beaker中有文件加锁的功能,但是在windows下它是不支持的。于是我在网上搜了一下,发现了一些结果。

http://pypi.python.org/pypi/lockfile 这是一个跨平台的锁机制。不过,它没有使用通常的fcntl模块,而是在Linux下通过符号链接,在windows下通过mkdir。这里有它的0.3版本的文档:

http://packages.python.org/lockfile/lockfile.html

通过它,我又找到了其它的几个锁模块:

Twisted  http://twistedmatrix.com/trac/browser/trunk/twisted/python/lockfile.py  在windows下没有使用msvcrt.locking。

zc.lockfile  http://pypi.python.org/pypi/zc.lockfile  它使用了msvcrt.locking,但是在Linux下不支持共享和排它锁的功能。

在Linux下,可以设置共享锁和排它锁,和数据库的锁机制有些象。如果一个文件加上了共享锁,则下一个进程如果也使用共享锁是允许的,但是如果使用了排它锁则不允许。如果一个文件加上了排它锁,下一个进程无论是使用共享锁还是排它锁都是被禁止的。但是在windows下,如果使用msvcrt.locking则并不区分,可以认为只是排它锁。

而zc.lockfile则功能不是很完整。在beaker中,之所以存在read_lock和write_lock就是充分利用了共享锁和排它锁。

于是我根据msvcrt.locking找到了这么一个地址:  http://www.gnome.org/~jdub/bzr/planet/2.0/planet/htmltmpl.py

它是htmltmpl项目的文件,其中也有lockfile的实现,在windows下,它使用msvcrt模块,在linux下支持共享和排它锁。

于是我根据它,自已写了一个lockfile的模块,将准备用在我自已写的session处理之上。

 

评论

我的评论:

发表评论

请 登录 后发表评论。还没有在Zeuux哲思注册吗?现在 注册 !
李迎辉

回复 李迎辉  2009年08月26日 星期三 16:54

共享就是share,可以加多次,是防exclusive(排它)锁的。

0条回复

電波系山寨文化科学家

回复 電波系山寨文化科学家  2009年08月26日 星期三 16:32

共享和冲突,到底是同义词还是反义词...

0条回复

暂时没有评论

Zeuux © 2024

京ICP备05028076号