В mod_wsgi я отправляю заголовки, запустив функцию start_response(), но все содержимое страницы передается с помощью yield/return. Есть ли способ передать содержимое страницы так же, как start_response()? Использование инструкции return.yield очень ограничительно, когда дело доходит до работы с фрагментированными данными.Передача данных в mod_wsgi
E.g.
def Application():
b = buffer()
[... page code ...]
while True:
out = b.flush()
if out:
yield out
class buffer:
def __init__(self):
b = ['']
l = 0
def add(self, s):
s = str(s)
l += len(s)
b.append(s)
def flush(self):
if self.l > 1000:
out = ''.join(b)
self.__init__()
return out
Я хочу, чтобы иметь буфер вывода содержимого при загрузке страницы, но выводит только содержимое достаточно однажды она складывается (в этом, например, 1000 байт).
Ну, это ограничение, потому что все уступки происходят в приложении() и не могут быть внедрены нигде. start_response() может быть размещен в любом месте приложения. Если бы я хотел запустить буфер вывода, который накапливает данные до определенной длины перед выходом в wsgi, это становится очень тяжелым, если не задействовать потоки. – Ian
Я просто привел вам пример, где вы можете уступить где-то еще. Нет связанных нитей. Вы все еще неясно, в чем именно заключается ограничение. Поместите некоторый пример псевдо-кода на то, как вы хотите работать в своем вопросе, чтобы мы могли либо заставить его работать, либо сказать, почему это невозможно. – nosklo
Я добавил пример, но проблема с моим примером заключается в том, что только буфер запускает результаты * после того, как * код страницы завершил выполнение, что в конце концов совпадает с тем, что я просто сделал обычный (не-chunked) ответ. – Ian