django如何处理全局变量并发的并发请求?

Bab*_*abu 6 python apache django concurrency mod-wsgi

我有一个通过apache/mod_wsgi托管的django实例.我使用pre_savepost_save信号存储保存前后的值,以便以后进行比较.为此,我使用全局变量来存储pre_save可以在post_save信号处理程序中访问的值.

我的问题是,如果两个请求A和B同时请求同一个Web服务,那么它是并发的吗?B不应读取由A写入的全局变量,反之亦然.

PS:我不对Lock变量使用任何线程.

Jam*_*arp 2

这部分取决于您的mod_wsgi配置。如果将其配置为每个进程仅使用一个线程,则全局变量是安全的——尽管出于多种原因我不建议使用它们。在多线程配置中,如果使用全局变量,则无法保证请求不会混淆。

您应该能够在pre_save和之间找到一些更本地的位置来存储您所需的数据post_save。我建议您在设计中多加考虑。

  • 谢谢!我刚刚在本页阅读相同的维基:[构建便携式应用程序](http://code.google.com/p/modwsgi/wiki/ProcessesAndThreading#Building_A_Portable_Application) (3认同)
  • 您可以使用 Python 标准“线程”库来帮助处理线程本地存储。请参阅 [threading.local](http://docs.python.org/2/library/threading.html#threading.local) 文档。 (3认同)
  • 我建议无论如何配置“WSGIDaemonProcess”,编写代码都能正常工作,这意味着避免全局可变状态。(再次,请参阅@KayZhu建议的[构建便携式应用程序](http://code.google.com/p/modwsgi/wiki/ProcessesAndThreading#Building_A_Portable_Application)。)您可以使用 `threading.local` 来生成正确的解决您的问题,但我的偏好是避免线程本地存储,因为它使程序的数据流不太清晰。 (2认同)