Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于在烧杯会话中存储Python锁对象,我应该有什么顾虑吗?_Python_Concurrency_Pylons_Beaker - Fatal编程技术网

关于在烧杯会话中存储Python锁对象,我应该有什么顾虑吗?

关于在烧杯会话中存储Python锁对象,我应该有什么顾虑吗?,python,concurrency,pylons,beaker,Python,Concurrency,Pylons,Beaker,我的网站上有一个特定页面,我想阻止同一用户连续访问两次。为了防止这种情况,我计划创建一个锁对象(来自Python的线程库)。但是,我需要跨会话存储这些信息。在会话(特别是烧杯会话)中尝试存储锁对象时,有什么需要注意的吗?我刚刚意识到这是一个可怕的问题,因为锁定锁并将其保存到会话需要两个步骤,从而破坏了锁原子操作的目的。我刚刚意识到这是一个可怕的问题,因为锁定锁并将其保存到会话需要两个步骤,从而破坏了锁原子操作的目的原子操作。在会话(或任何其他需要序列化的地方)中存储threading.Lock实

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

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

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

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

在会话(或任何其他需要序列化的地方)中存储线程锁实例是一个糟糕的主意,如果您尝试(因为这样的对象不能序列化,例如,它不能是
pickle
d)。进程协作序列化的传统方法依赖于(如您所示,如果希望锁定为每个用户,则依赖于“人工”文件,例如在
/tmp/locks/
目录中)。我相信wikipedia条目在描述一般领域方面做得很好;如果您告诉我们您运行的是什么操作系统,我们可能会提出更具体的建议(不幸的是,我不相信有跨平台的解决方案).

您所说的“连续访问两次”到底是什么意思?用户访问的页面会产生一个子进程。如果同时启动其中两个进程,它们可能会相互崩溃。如果用户要快速访问页面,则可能会启动两次或更多次,然后启动其中两个或更多个进程并使彼此崩溃。您的确切意思是什么通过“连续访问两次”?用户访问的页面会产生一个子进程。如果同时启动其中两个进程,它们可能会相互崩溃。如果用户要快速访问页面,两次或更多次,则可能会启动其中两个或更多个进程,并使彼此崩溃。我还意识到,挂架/烧杯会话本身也会崩溃作为对锁定的支持,我还意识到挂架/烧杯会话本身也支持锁定。