关于django线程安全的问题

时间:2012-03-28 22:28:01

标签: python django multithreading mod-wsgi

我有一个django应用程序,用于管理调查的注册。

有固定数量的插槽,我想在用户注册时“预留”插槽。 在我的一个视图中,我获得了下一个可用的插槽并保留它(如果没有可用的插槽,则重定向用户。)

我想防止两个用户同时注册的情况被注册到同一个插槽的情况,因为方法“get_next_available_slot”为两个用户返回了相同的插槽。

为此,我试图了解使用Django视图的进程和线程。

1)每个请求是否在一个单独的线程中处理并使用python线程模块的LOCK()来处理独占访问?

2)我正在使用modwsgi在RHEL上运行apache。如何配置Apache / modwsgi以确保更简单,更简单的解决方案来处理上述情况?

我并不期望Web应用程序会有巨大的负担。所以我想要一个更简单的解决方案,而不是一个高性能的解决方案。

2 个答案:

答案 0 :(得分:2)

您不应该对django应用程序的线程/进程设置做出假设,因为它取决于您正在使用的Web服务器以及如何将django集成到它。因此,进程间通信方法不应该依赖这些细节是可靠的。一个好的解决方案是使用内置缓存库来锁定和共享数据。

这是一个good example缓存锁定,确保一次只运行一次芹菜任务实例。您也可以将它应用于常规请求。

答案 1 :(得分:1)

你不应该担心这种事情。

这些插槽存储在数据库中吗?数据库应该为你处理所有的锁定机制,只要确保你在一个事务下运行所有​​东西,你就可以了。