Можете ли вы запустить OpenERP в отладчике, таком как PyDev плагин для Eclipse ? Я считаю, что наиболее эффективный способ выследить проблемы. Я не использовал модуль контрольного журнала, но я быстро взглянул на исходный код , и кажется, что курсор открывается в начале log_fct()
. (Я бы ожидал, что он сообщит в строке 207, какую версию вы используете?) Вот что я считаю соответствующим кодом:
def log_fct(self, db, uid, passwd, object, method, fct_src, *args):
logged_uids = []
pool = pooler.get_pool(db)
cr = pooler.get_db(db).cursor() # line 207 in version 5.0.12
# ...
if method in ('create'):
# ...
cr.close()
return res_id
# ...
cr.close()
Похоже, что в методе есть несколько операторов return, но каждый из них, кажется, сначала вызывает cr.close()
, поэтому я не вижу никаких очевидных проблем. Попробуйте запустить его в отладчике с точкой останова в этом методе. Если это невозможно, вы можете попробовать записать в журнал что-то вроде этого:
logger = netsvc.Logger()
logger.notifyChannel('audittrail', netsvc.LOG_INFO, 'something happened')
Обновление:
Вы прокомментировали, что это происходит под большой нагрузкой. Возможно, генерируется исключение, и курсор не закрывается. Вы можете использовать оператор try
... finally
, чтобы убедиться, что курсор всегда закрыт. Вот как будет выглядеть приведенный выше пример после его преобразования:
def log_fct(self, db, uid, passwd, object, method, fct_src, *args):
logged_uids = []
pool = pooler.get_pool(db)
cr = pooler.get_db(db).cursor() # line 207 in version 5.0.12
try:
# ...
if method in ('create'):
# ...
return res_id
# ...
finally:
cr.close()