Как передать значения из одного класса в другой;каждый работает потенциально в разных потоках? - PullRequest
1 голос
/ 15 августа 2011

У меня есть файл с именем filterspecs.py, который содержит 3 вещи:

  1. tls = threading.local()
  2. класса A, который наследуется от django.contrib.admin.views.main.ChangeList
  3. класса Bкоторая наследуется от django.contrib.admin.filterspecs.FilterSpec

Цель : я хочу передать значение list, доступное экземпляру A, экземпляру B,Поскольку жизненный цикл A и B управляется платформой (Django), я не могу придумать частный способ передачи данных между экземплярами (использование Queue было бы излишним).

Попытка # 1 завершается неудачно при использовании режима WSGI (daemon).В классе A список добавляется в локальный поток.

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

Но в классе B следующее возвращает False:

2.    hasattr(tls, 'list_display')

Просто для сравнения, это работает за пределамиapache / mod_wsgi, если я запускаю его через

manage.py runserver

Я просмотрел журналы и обнаружил, что разные потоки выполняли строки 1 и 2.

Какими еще способами я могу решить эту проблему?* * 1037

1 Ответ

1 голос
/ 15 августа 2011

Похоже, вы хотите обмениваться данными не только между двумя классами, но и между двумя совершенно разными HTTP-запросами. HTTP не имеет состояния - Apache не предназначен для поддержки веб-приложений с состоянием. Вы должны сохранить данные в базе данных и прочитать их во втором запросе. (Или вы можете запустить свое веб-приложение в отдельном процессе и самостоятельно управлять состоянием, что по существу добавляет «программиста базы данных» в описание вашей работы. Это не рекомендуется.)

Ваши две части кода могут не просто выполняться в разных потоках, они могут выполняться в разных процессах.

...