Если вы используете lighttpd для управления веб-приложением на основе Django, каждый вызов создает новый экземпляр интерпретатора Python? - PullRequest
0 голосов
/ 15 февраля 2012

Я бы хотел иметь возможность делиться некоторыми экземплярами объектов между запросами на управление асинхронной доставкой событий, но это похоже на то, что не будет работать с сервером на основе событий, таким как lighttpd. Это тот случай? Какой лучший способ обойти это, если это так?

Примечание: Это не стандартное веб-развертывание. Я пытаюсь сделать это на встроенной платформе только для локальной сети. Таким образом, некоторые типичные проблемы развертывания / масштабирования здесь на самом деле не играют, а ресурсы стоят дорого.

1 Ответ

1 голос
/ 15 февраля 2012

FastCGI уже работает долго, поэтому для получения доступа к долгоживущему объекту нужно просто присвоить объект переменной уровня модуля.

# yourapp/async_thingy.py
_long_lived_object = None
def get_long_lived_object():
    global _long_lived_object
    if _long_lived_object is None:
        _long_lived_object = create_the_long_lived_object()
    return _long_lived_object

# views
from .async_thingy import get_long_lived_object
def the_view(request):
    # do whatever
    long_lived_obj = get_long_lived_object()
    long_lived_obj.whatever()
    # the rest of the view - return your response, etc.

Я бы начал с чего-то вроде этого. Существуют и другие потенциальные проблемы, если вы используете несколько процессов Python, но, учитывая ограничения ресурсов, я предполагаю, что это не так.

...