サーバー上で長時間実行することを目的としたチェリーピーAPIがあります。
私の手に負えないさまざまな理由で、接続が停止したり閉じたりする可能性のある信頼できないクライアントがあります。
サーバー API の実行中は、接続のステータスを定期的にチェックし、クライアントがまだリッスンしていることを確認し、クライアントが離れている場合は操作を中止したいと考えています。
チェリーピー リクエストの処理中に接続ステータスをポーリングする方法を説明している適切な場所が見つかりませんでした。
このような長時間実行の一例は、小さなバッファー (限られたメモリ) のチャンクで複数の大きなファイル (数十 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}