我有一个旨在在服务器上运行很长时间的cherrypy api。
我有一个不可靠的客户端,由于我无法控制的各种原因,它可能会死掉或关闭连接。
在我的服务器 api 运行期间,我想定期检查连接的状态,确保客户端仍在侦听并在客户端离开时中止我的操作。
我找不到任何描述如何在服务cherrypy请求时轮询连接状态的好地方。
这种长期运行的一个例子是在小缓冲区(有限内存)块中计算多个大文件(数十 GB)的 md5。
我不需要任何缩短运行时间的解决方案,因为这不是我的目标。我想尽可能长时间地保持此连接打开,但如果它关闭则中止。
这是我的代码的简单示例:
@cherrypy.expose
def foo(self):
cherrypy.response.headers['Content-Type'] = 'text/plain'
def run():
for result in get_results(): # get_results() is a heavy method mentioned
yield json.dumps(result)
return run()
foo._cp_config = {'response.stream': True}