我有一个连接到/my/view之类路径的金字塔视图
因为金字塔的架构,两个请求可以同时访问同一个视图。在我的视图中,我有一个函数,每次只能有一个用户访问,这意味着:如果用户A正在处理该函数,而用户B调用该视图,则用户B在A完成之前不会进入该函数。
我尝试过:
lock.acquire()
try:
my_function()
finally:
lock.release()
但是,由于金字塔在每次请求时都会启动一个新线程,所以它无法工作。
你知道我该怎么控制这一切吗?
发布于 2020-07-13 18:22:11
您的锁应该可以工作,假设锁定义在视图调用之间共享的位置(模块变量、注册表变量等)。值得注意的是,金字塔本身并不启动新的线程。这是由您的WSGI服务器完成的,每个服务器的详细信息对于回答您的问题都很重要。
如果您使用waitress,则请求由线程处理,因此在共享内存空间中,您可以在请求之间共享锁。在其他场景中,每个请求都使用单独的进程,此时线程级别的锁将不起作用。因此,这取决于您的部署,在哪里是定义锁的最佳位置。例如,要跨进程共享锁,最好的位置是redis或您的数据库。
https://stackoverflow.com/questions/62864809
复制