0

Я просматриваю шаблон шаблона Django из-за проблемы с потоками, которую мы видим при одновременном одновременном вызове одной и той же услуги с использованием AJAX с одной веб-страницы.Django TemplateView thread security

Симптомы - это то, что вы ожидаете от проблемы с потоками, связанной с запросами/ответами на сервере. Иногда значение, которое мы ожидаем от первого вызова, возвращается как для первого, так и для второго, иногда оно обратное, иногда оно работает так, как ожидалось. Если мы сериализуем вызовы AJAX, результаты всегда верны.

Глядя на код, я вижу, что TemplateView наследует от TemplateResponseMixin, который имеет следующую реализацию:

def render_to_response(self, context, **response_kwargs): 
    """ 
    Returns a response, using the `response_class` for this 
    view, with a template rendered with the given context. 

    If any keyword arguments are provided, they will be 
    passed to the constructor of the response class. 
    """ 
    response_kwargs.setdefault('content_type', self.content_type) 
    return self.response_class(
     request = self.request, 
     template = self.get_template_names(), 
     context = context, 
     **response_kwargs 
    ) 

Таким образом, TemplateView требует переменную экземпляра с именем self.request. Если данный экземпляр подкласса TemplateView используется для одновременных запросов, я предполагаю, что вы увидите поведение, которое мы видим.

Я прав? Я не изучал поточную модель Django в отношении обработки одновременных запросов. Если их модель потоков похожа на ту, которая используется в каждом ядре Java Servlet, с которым я работал, тогда я не могу придумать, как это не сломается. Если Django делает что-то похожее на использование пула экземпляров TemplateView для обработки параллельных запросов или делает что-то рудиментарное, как запросы на очередность, то я ищу не в том месте, и нам нужно искать в другом месте, чтобы исправить нашу проблему с потоками.

Заранее за вашу помощь.

+0

Вы должны разместить свой urls.py для этого вида. –

ответ

4

Существует один экземпляр представления для запроса, вы можете найти код, который делает это в реализации View.as_view (это то, что вы вызываете в URL conf).

Некоторые Template Tags, однако, не являются потокобезопасными.

Чтобы помочь вам, я думаю, вам нужно будет рассказать нам больше о точной проблеме, которую вы видите. Вы также можете рассказать нам, какую технологию вы используете для обслуживания запросов, - это то, что mod_wsgi, Gunicorn, что-то еще?

+0

Спасибо, Томас. Подумав об этом еще пять недель, я только что зарегистрировал идентификатор объекта моего представления в течение нескольких запросов и увидел, что вы правы, каждый из них создается каждый раз. Вернуться к доске для рисования. Чтобы ответить на ваши вопросы, другой разработчик в моей команде увидел это на своем собственном окне Windows dev, предположительно запустив его изнутри Eclipse. –

Смежные вопросы