如何将值从一个类传递到另一个类;每个可能在不同的线程上运行?

时间:2011-08-15 03:08:21

标签: python django mod-wsgi wsgi

我有一个名为filterspecs.py的文件,其中包含3件事:

  1. tls = threading.local()
  2. 继承自django.contrib.admin.views.main.ChangeList
  3. 的A类
  4. 继承自django.contrib.admin.filterspecs.FilterSpec
  5. 的B类

    目标:我想将list的实例可用的值A传递给B的实例。由于A和B的生命周期由框架(Django)管理,我无法想到在实例之间传递数据的私有方式(使用Queue将是一种过度杀伤)。

    使用WSGI(守护程序)模式时,

    尝试#1 失败。 在A类中,列表被添加到threadlocal。

    1.    tls.list_display = ['foo', 'bar']
    

    但是在B组中,以下内容返回False

    2.    hasattr(tls, 'list_display')
    

    为了比较,如果我通过

    运行它,这在apache / mod_wsgi之外工作
    manage.py runserver
    

    我查看了日志,发现不同的线程正在执行第1行和第1行。 2。

    我还有哪些方法可以解决这个问题?

1 个答案:

答案 0 :(得分:1)

听起来您希望不仅在两个类之间共享数据,而且在两个完全不同的HTTP请求之间共享数据。 HTTP是无状态的 - Apache不是为容纳有状态的Web应用程序而设计的。您必须将数据保存到数据库并在第二个请求中将其读回。 (或者您可以在单独的流程中运行Web应用程序并自行管理状态 - 这实际上会在您的工作描述中添加“数据库程序员”。不建议这样做。)

您的两段代码可能不只是在不同的线程中运行,它们可能在不同的进程中运行。