3

短い CG アニメーションの制作を管理するための Python Web ベースのアセット管理システムを作成しました。Python2.7、SQLite を使用した SQLAlchemy、および CherryPy を使用しています。

現在、本番環境で使用されており、ほとんどの場合、正常に動作しています。このシステムは、プロダクション データを中央サーバーに保持し、ユーザーがアセットをローカル マシンに「チェックアウト」できるようにします。これは、サーバーが XMLRPC 経由で通信するクライアント マシンで小さな Python サービスを実行することによって行われます。私が抱えている問題は、ユーザーがアセットをチェックインまたはチェックアウトしたり、アセットを公開したりするときに発生します。これらはすべて、ファイルが大きいために完了するまでに数分かかるリクエストですが、ほとんどの場合、数十秒かかります。

問題は、リクエストの最後にセッションを解放しようとすると、CherryPy が KeyError を発生させることです。トレースバックは次のとおりです。

[29/Apr/2013:15:39:02]  Traceback (most recent call last):
  File "/home/i7858384/local/lib/python2.7/site-packages/CherryPy-3.2.2-py2.7.egg/cherrypy/_cprequest.py", line 102, in run
    hook()
  File "/home/i7858384/local/lib/python2.7/site-packages/CherryPy-3.2.2-py2.7.egg/cherrypy/_cprequest.py", line 62, in __call__
    return self.callback(**self.kwargs)
  File "/home/i7858384/local/lib/python2.7/site-packages/CherryPy-3.2.2-py2.7.egg/cherrypy/lib/sessions.py", line 698, in save
    cherrypy.session.save()
  File "/home/i7858384/local/lib/python2.7/site-packages/CherryPy-3.2.2-py2.7.egg/cherrypy/lib/sessions.py", line 230, in save
    self.release_lock()
  File "/home/i7858384/local/lib/python2.7/site-packages/CherryPy-3.2.2-py2.7.egg/cherrypy/lib/sessions.py", line 374, in release_lock
    self.locks[self.id].release()
KeyError: u'6f23f62a29d3db4ad18c89165d23c1b7170570b8'

[29/Apr/2013:15:39:02] HTTP 
Request Headers:
  Content-Length: 2698301
  HOST: 172.16.76.31:8080
  Remote-Addr: 172.16.76.164
  ACCEPT: */*
  USER-AGENT: python-requests/0.14.2 CPython/2.6.6 Linux/2.6.32-279.5.2.el6.x86_64
  Content-Type: application/x-www-form-urlencoded
  ACCEPT-ENCODING: gzip, deflate, compress
[29/Apr/2013:15:39:02] HTTP Traceback (most recent call last):
  File "/home/i7858384/local/lib/python2.7/site-packages/CherryPy-3.2.2-py2.7.egg/cherrypy/_cprequest.py", line 660, in respond
    self.hooks.run('before_finalize')
  File "/home/i7858384/local/lib/python2.7/site-packages/CherryPy-3.2.2-py2.7.egg/cherrypy/_cprequest.py", line 112, in run
    raise exc
KeyError: u'6f23f62a29d3db4ad18c89165d23c1b7170570b8'

たとえば、ユーザーがアセットをチェックアウトすると、ブートストラップ モーダルを通じて読み込みバーが表示されます。このセッション エラーが発生すると、明らかに無期限にハングします。しかし、ユーザーがページをリロードすると、アセットがチェックアウトされ、すべてが正しく処理されていることがわかります。したがって、このエラーは、すべてが正しく処理された後、リクエストの最後に発生すると想定しています。

4

1 に答える 1