Недавно я пытался узнать о WSGI и, кроме того, о том, как работает сеть в отношении Python. Поэтому я читал Werkzeug и PEP333, чтобы учиться.
Однако я столкнулся с небольшим вопросом, который, я думаю, понимаю, но, вероятно, нет, поэтому я был бы признателен за то, что вы направили его в правильном направлении.
PEP333 утверждает:
Объект приложения — это просто вызываемый объект, который принимает два аргумента. Термин "объект" не следует истолковывать как требующий фактического экземпляра объекта: функция, метод, класс или экземпляр с методом вызова приемлемы для использования в качестве объекта приложения. Объекты приложений должны иметь возможность вызываться более одного раза, поскольку практически все серверы/шлюзы (кроме CGI) будут делать такие повторяющиеся запросы.
Реализация:
class AppClass:
"""Produce the same output, but using a class
(Note: 'AppClass' is the "application" here, so calling it
returns an instance of 'AppClass', which is then the iterable
return value of the "application callable" as required by
the spec.
If we wanted to use *instances* of 'AppClass' as application
objects instead, we would have to implement a '__call__'
method, which would be invoked to execute the application,
and we would need to create an instance for use by the
server or gateway.
"""
def __init__(self, environ, start_response):
self.environ = environ
self.start = start_response
def __iter__(self):
status = '200 OK'
response_headers = [('Content-type', 'text/plain')]
self.start(status, response_headers)
yield "Hello world!\n"
Мой вопрос здесь только для того, чтобы уточнить, правильно ли я понял это.
В нем указано, что AppClass — это приложение, и когда мы его вызываем, оно возвращает экземпляр AppClass. Но затем дальше говорится, что «если мы хотим вместо этого использовать экземпляры объектов приложения AppClass as», значит ли это, что когда серверная сторона WSGI вызывает объект AppClass, работает только один экземпляр?
Например. Сервер может отправить несколько запросов (200 OK) к приложению для получения дополнительных ответов, поэтому iter помещается в класс. Но каждый запрос проходит через один и тот же единственный экземпляр AppClass, каждый запрос к серверу в основном не создает более одного экземпляра AppClass?
Извините, если это многословно, и еще раз извиняюсь, если я не имел большого смысла. Я пытаюсь улучшить atm.
Ценим ваш вклад, как всегда.
Спасибо.
AppClass
для каждого запроса (поскольку каждый запрос будет иметь потенциально уникальныйenviron
) - person Anthony Sottile   schedule 17.07.2017