Форум сайта python.su
Python 2.6 &Ubuntu 0.10 Maverick
ZODB установлен через PyPI
Решил поэксперементировать с примером из руководства и…. столкнулся с такой ошибкой:
No handlers could be found for logger "zc.lockfile"
Traceback (most recent call last):
File "/home/gur/openpypsi/ZODB/ZODBexample.py", line 6, in <module>
storage = FileStorage.FileStorage('drawing.fs')
File "/usr/local/lib/python2.6/dist-packages/ZODB/FileStorage/FileStorage.py", line 126, in __init__
self._lock_file = LockFile(file_name + '.lock')
File "/usr/local/lib/python2.6/dist-packages/zc/lockfile/__init__.py", line 76, in __init__
_lock_file(fp)
File "/usr/local/lib/python2.6/dist-packages/zc/lockfile/__init__.py", line 59, in _lock_file
raise LockError("Couldn't lock %r" % file.name)
LockError: Couldn't lock 'drawing.fs.lock'
No handlers could be found for logger "ZODB.FileStorage"
from turtle import *
import transaction
from ZODB import DB, FileStorage
storage = FileStorage.FileStorage('drawing.fs')
db = DB(storage)
connection = db.open()
drawing = connection.root()
def switchupdown(x=0, y=0):
pen()['pendown'] and not up() or down()
def redraw(turtle_buffer):
ops = [turtle_buffer.pop() for i in range(turtle_buffer.nr_of_items())]
ops.reverse()
for op in ops:
if op[0] == 'go':
up()
goto(op[1])
if op[3][0]:
down()
goto(op[2])
def clear():
clearscreen()
init()
def quit():
drawing['turtle_buffer'] = getturtle().undobuffer
transaction.commit()
bye()
def init():
onscreenclick(goto,1)
onscreenclick(switchupdown,3)
onkey(quit, 'q')
onkey(clear, 'c')
listen()
if __name__ == "__main__":
if 'turtle_buffer' in drawing:
redraw(drawing['turtle_buffer'])
init()
mainloop()
Офлайн
guranvirЭто как раз из-за того, что соединение не закрыли. Нужно делать
No handlers could be found for logger “ZODB.FileStorage”
db.close()
guranvirПроцесс после завершения в общем случае должен убивать lock. Разве что у вас нет прав на удаление этого файла.
LockError: Couldn't lock ‘drawing.fs.lock’
Офлайн
Большое спасибо regall! Обе проблемы были решены, закрытием соединения с базой. Судя по всему при завершении программы не происходит корректного освобождения ресурсов, при отсутствии принудительного закрытия соединения с базой.
Офлайн