Я создаю приложение на платформе Pyramid и хотел бы использовать с ним web2py-DAL. База данных, встроенная в Firebird, является предпочтительной.
Это прекрасно работает, пока я не попытаюсь асинхронно вызвать несколько представлений с одной веб-страницы. Различные ошибки, такие как «Неверное состояние курсора», «Неверная ссылка на курсор» или «Попытка повторного закрытия закрытого курсора», возникают из драйвера kinterbasdb, где sqlite просто ломается без каких-либо сообщений об ошибках и берет с собой python. Эти вызовы представлений не делают ничего, кроме простого чтения с помощью SELECT.
Это происходит в том случае, если корневая фабрика пирамиды возвращает один и тот же объект DAL при каждом запросе. Кажется, что потоки из разных запросов работают с одним и тем же объектом курсора, поэтому курсор закрывается, в то время как другой поток предполагает, что курсор находится здесь.
Если я создаю новый объект DAL для каждого запроса, у меня возникает другая проблема - каждое новое соединение по каждому запросу выделяет память, и эта память не освобождается. Таким образом, после нескольких запросов доцентов теряется несколько сотен МБ памяти.
К сожалению, Sqlalchemy не подходит для этого проекта.
Есть идеи?