关于在Beaker会话中存储Python Lock对象,我有什么顾虑吗?

时间:2010-05-08 16:44:28

标签: python concurrency pylons beaker

我的网站上有一个页面,我想阻止同一个用户连续两次访问它。为了防止这种情况,我计划创建一个Lock对象(来自Python的线程库)。但是,我需要跨会话存储它。在尝试将Lock对象存储在会话中时(特别是Beaker会话),我应该注意什么?

2 个答案:

答案 0 :(得分:1)

在会话中(或者需要序列化的其他任何地方)存储一个threading.Lock实例是一个可怕的想法,如果你尝试的话,你可能会得到一个异常(因为这样的对象不能被序列化,例如,它不能是pickle d)。用于协作序列化进程的传统方法依赖于file locking(例如在诸如/tmp/locks/<username>之类的目录中的“人工”文件,如果您希望锁定为每个用户,如您所指示的那样)。我相信维基百科条目在描述一般区域方面做得很好;如果你告诉我们你正在运行什么操作系统,我们可能会建议一些更具体的(不幸的是我不相信有一个跨平台的解决方案)。

答案 1 :(得分:0)

我刚刚意识到这是一个可怕的问题,因为锁定锁并将其保存到会话需要两个步骤,从而破坏了锁的原子操作的目的。