私は現在、レガシーpythonフレームワーク(webware 0.8.1)を削除し、その上にcherrypy3.1.2をレイヤー化しようとしています。すべてのウェブウェアページをcherrypyページに変換するのではなく、単にウェブウェアを介して処理し、そのようにcherrypyに渡すだけです。
def default(self, url, *suburl, **kwarg):
...snip...
strmout = DispatcherIO()
request = HTTPRequest(local_req)
transaction = self.create_transaction(request)
response = self.create_response(transaction, strmout)
transaction.setServlet(servlet)
transaction.awake()
transaction.respond()
return str(strmout)
これは、POSTが含まれていないすべてのページで正常に機能します。しかし、ログインなどの投稿を含むページでは、cherrypyは次の場所でハングします。
request = HTTPRequest(local_req)
これにより、親のcgi.FieldStorageのコンストラクターを呼び出すFieldStorageが呼び出されます。これが最終的にハングする場所です。
ただし、ターミナルでctrl-cを押すと、処理が続行され、ページが正常に読み込まれた後に終了します。したがって、ログインページで[ログイン]をクリックするとハングし、ターミナルでctrl-cを押してログインし、cherrypyをシャットダウンします。
クイックスタートの代わりにcherrypy.engine.startを使用すると、シグナルハンドラーが開始されないことがわかりました。この場合に何が起こるかは、以前の動作と同様の結果になりますが、cherrypyは実行を継続します。
この問題の原因は何ですか?助けていただければ幸いです。乾杯。