私は、送信メール メッセージに対して特定のフロー制御を行う Python スクリプトを使用しており、主にユーザーがスパムを送信しているかどうかをチェックしています。
このスクリプトは、 を介してデータベースとの永続的な接続を確立しますSQLObject
。特定の状況下で、接続がサードパーティによってドロップされ (たとえば、過剰なアイドル状態のためにファイアウォールが接続を閉じる)、 は接続が閉じられたSQLObject
ことに気付かず、無効な TCP ハンドラーでクエリを送信し続け、ログに記録されます。次のようなエントリ:
Feb 06 06:56:07 mailsrv2 flow: ERROR Processing request error: [Failure instance: Traceback: <class 'psycopg2.InterfaceError'>: connection already closed#012/usr/lib/python2.7/threading.py:524:__bootstrap#012/usr/lib/python2.7/threading.py:551:__bootstrap_inner#012/usr/lib/python2.7/threading.py:504:run#012--- <exception caught here>---#012
/opt/scripts/virtualenv/local/lib/python2.7/site-packages/twisted/python/threadpool.py:191:_worker#012
/opt/scripts/virtualenv/local/lib/python2.7/site-packages/twisted/python/context.py:118:callWithContext#012
/opt/scripts/virtualenv/local/lib/python2.7/site-packages/twisted/python/context.py:81:callWithContext#012
/opt/scripts/flow/server.py:91:check#012
/opt/scripts/flow/flow.py:252:check#012
/opt/scripts/flow/flow.py:155:append_to_log#012
/opt/scripts/virtualenv/local/lib/python2.7/site-packages/SQLObject-1.3.1-py2.7.egg/sqlobject/main.py:1226:__init__#012
/opt/scripts/virtualenv/local/lib/python2.7/site-packages/SQLObject-1.3.1-py2.7.egg/sqlobject/main.py:1274:_create#012
/opt/scripts/virtualenv/local/lib/python2.7/site-packages/SQLObject-1.3.1-py2.7.egg/sqlobject/main.py:1298:_SO_finishCreate#012
/opt/scripts/virtualenv/local/lib/python2.7/site-packages/SQLObject-1.3.1-py2.7.egg/sqlobject/dbconnection.py:468:queryInsertID#012
/opt/scripts/virtualenv/local/lib/python2.7/site-packages/SQLObject-1.3.1-py2.7.egg/sqlobject/dbconnection.py:327:_runWithConnection#012
/opt/scripts/virtualenv/local/lib/python2.7/site-packages/SQLObject-1.3.1-py2.7.egg/sqlobject/postgres/pgconnection.py:191:_queryInsertID#012]
これは、実際にこの種の状況に対して何らかのコールバックが必要であると私に思わせます。そうしないと、そのログエントリは書き込まれません。そのコールバックを使用して、データベースへの新しい接続を確立します。それに関するドキュメントを見つけることができませんでした。
そのコールバックを実装することさえ可能かどうか、またそれを宣言する方法を知っている人はいますか?
ありがとう。