Ошибка сегментации в многопоточном использовании Sqlite в Python! - PullRequest
0 голосов
/ 09 июня 2011

Я разрабатываю код на Python, который использует Sqlite в многопоточной программе. Удаленный хост вызывает некоторые функции xmlrpc, и создаются новые потоки. Каждая функция, которая выполняется в новом потоке, использует sqlite для вставки данных или чтения данных из базы данных.

Моя проблема в том, что при вызове сервера более 5 раз одновременно сервер обрывается с «ошибкой сегментации». И вывод не предоставляет никакой другой информации. Есть идеи, что может вызвать проблему?

Ответы [ 2 ]

2 голосов
/ 09 июня 2011

Если вы прочитаете документацию sqlite (http://www.sqlite.org/threadsafe.html),, вы увидите, что в ней написано:

SQLite поддерживает три различных режима потоков:

Однопоточный. В этом режимевсе мьютексы отключены, а SQLite небезопасен для использования более чем в одном потоке одновременно.

Многопоточность. В этом режиме SQLite может безопасно использоваться несколькими потоками при условии, что не используется одно соединение с базой данных.одновременно в двух или более потоках.

Сериализованный. В сериализованном режиме SQLite может безопасно использоваться несколькими потоками без ограничений.

Так что, возможно, вы либо воднопотоковый режим или в многопоточном режиме и повторное использование соединений. Повторное использование соединения безопасно только в последовательном режиме (который медленный)

Теперь в документации Python говорится, что он не должен позволять вам делиться соединениями.Используете ли вы модуль python-sqlite3 или изначально подключены к базе данных?

1 голос
/ 11 июня 2011

Мой модуль APSW является потокобезопасным, и вы можете использовать это.Стандартный Python SQLite нельзя безопасно использовать одновременно в нескольких потоках.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...