Я использую своего рода длинный опрос в своем приложении Django, чтобы возвращать клиенту сообщения о состоянии длительной операции по мере ее продвижения. Я делаю это, возвращая объект HttpResponse в моей функции представления, которая инициализируется итератором, который возвращает строки. Все это прекрасно работает, но функция итератора становится довольно длинной с тоннами доходности, чтобы возвращать сообщения о состоянии.
Я бы хотел сконструировать это лучше, разбив длинную операцию на несколько функций, каждая из которых возвращает свои собственные сообщения о состоянии. Но я не вижу способа сделать это. Другими словами, у меня есть это:
def my_long_operation():
do_something()
yield "Did something"
do_something_else()
yield "Did something else"
... и я бы хотел:
def do_something():
do_first_part_of_something()
yield "Did first part of something"
do_second_part_of_something()
yield "Did second party of something"
def do_something_else():
do_first_part_of_something_else()
yield "Did first part of something else"
do_second_part_of_something_else ()
yield "Did second party of something else"
def my_long_operation():
do_something()
do_something_else()
Есть ли способ получить выход во втором примере, чтобы получить значения для вызывающей стороны итератора? Если нет, есть ли лучший подход? Я посмотрел на WebSockets, но, похоже, он еще не полностью выпечен (особенно с точки зрения поддержки браузера). Я также рассмотрел реальный опрос сервера, но это будет намного сложнее, поэтому я хотел бы продолжать поддерживать открытое соединение и передавать сообщения, если это возможно.