Печать в HTML без возврата

Предположим, я хочу сделать простой цикл, и мне потребуется некоторое время для его выполнения.

for i in range(0, 100000000000):
    print i

Теперь вот код бутылки, который у меня есть. Я хочу распечатать весь промежуточный вывод, например 1,2,3,4... до окончания цикла.

import bottle

@bottle.route('/')
def home_page():
    total = 0
    for i in range(0, 100000000000):
        total = i + 0
        print i
    return bottle.template('hello.tpl', {"total": total})

Как я могу вывести i во время итерации? Я попробовал «ответ», но это не сработало, все равно придется возвращаться.


person Aristotle Tan Yi Sing    schedule 08.01.2016    source источник
comment
Я думаю, вы неправильно поняли основы работы веб-страниц. Возможно, вы могли бы получить что-то, работающее с опросом вашего бэкэнда с помощью запроса ajax, но по большей части это не то, что делается часто. Кроме того, из того, что я могу сказать, фляга не имеет ничего общего с вашим вопросом.   -  person Sayse    schedule 08.01.2016
comment
Но это все, веб-страницы работают, отправляя запрос и ожидая одиночного ответа. Таким образом, вы можете где-то сохранить прогресс и продолжать отправлять запросы на этот прогресс, но это слишком широко для ответа на stackoverflow.   -  person Sayse    schedule 08.01.2016
comment
На самом деле можно отправить частичный контент в браузер через http. PHP реализует функцию, называемую сбросом, и, если я правильно помню, он автоматически сбрасывает содержимое после некоторого заданного порога размера/времени, что может привести новичка к мысли, что частичные ответы являются правилом, а не исключением. Посмотрите на этот вопрос в качестве примера: stackoverflow.com/questions/6300859/   -  person Alexander Holmbäck    schedule 08.01.2016


Ответы (2)


Я думаю, вы спрашиваете о длинном опросе. В документации по бутылке это упоминается в контексте использования Гринлеты. Вот пример оттуда:

from gevent import monkey; monkey.patch_all()

from time import sleep
from bottle import route, run

@route('/stream')
def stream():
    yield 'START'
    sleep(3)
    yield 'MIDDLE'
    sleep(5)
    yield 'END'

run(host='0.0.0.0', port=8080, server='gevent')

Есть также несколько других вопросов SO, в которых это обсуждается.

Удачи!

person ron rothman    schedule 08.01.2016
comment
Это именно то, что я хочу. Спасибо друг. - person Aristotle Tan Yi Sing; 08.01.2016

Вы не можете вывести i в html во время итерации. Что вы можете сделать, так это вернуть список элементов в свой шаблон и отобразить их перед возвратом HTTP-ответа, как предложил @Baterson.

Если вам нужно отладить приложение, рассмотрите возможность использования отладчика Python. Кроме того, настройка ведения журнала python в вашем проекте может упростить отслеживание ошибок в вашем проекте.

Во фрагменте кода выше print будет отображать данные в вашей консоли (на которой запущен веб-сервер, поэтому, если вам нужно проверить, какое значение имеет значение, если i переключиться на консоль и посмотреть, что там происходит).

Небольшое предложение вам ознакомиться с парадигма дизайна MVC, после прочтения и понимания этой статьи вам будет намного легче работать с botle.

person Andriy Ivaneyko    schedule 08.01.2016