在Django长期投票

Mat*_*ner 5 python django long-polling

我在我的Django应用程序中使用了一种长轮询,以便在客户端进行过程中向客户端返回有关长操作的状态消息.我通过在我的视图函数中返回一个HttpResponse对象来实现这一点,该函数使用返回字符串的迭代器进行初始化.这一切都很好,但是迭代器函数变得非常长,有大量的收益来返回状态消息.

我想通过将长操作分成多个函数来更好地构建这个函数,每个函数都返回自己的状态消息.但我看不到这样做的方法.换句话说,我有这个:

def my_long_operation():
  do_something()
  yield "Did something"
  do_something_else()
  yield "Did something else"
Run Code Online (Sandbox Code Playgroud)

......我希望:

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()
Run Code Online (Sandbox Code Playgroud)

有没有办法让第二个例子中的yield得到迭代器调用者的值?如果没有,是否有更好的方法?我查看了WebSockets但它似乎还没有完全出炉(特别是在浏览器支持方面).我还考虑了对服务器进行真正的轮询,但这会更加复杂,所以我希望继续保持开放连接并尽可能地传输消息.

Jac*_*zny 4

尝试:

import itertools

def my_long_operation():
    return itertools.chain(do_something(), do_something_else())
Run Code Online (Sandbox Code Playgroud)