Наиболее вероятная причина, по которой вы получаете ошибки с заблокированными базами данных, заключается в том, что вы должны выдать
conn.commit()
после завершения операции с базой данных. Если вы этого не сделаете, ваша база данных будет заблокирована от записи и останется такой. Другие потоки, которые ожидают записи, истечут через некоторое время (по умолчанию установлено значение 5 секунд, подробности см. http://docs.python.org/2/library/sqlite3.html#sqlite3.connect).
Пример правильной и одновременной вставки может быть следующим:
import threading, sqlite3
class InsertionThread(threading.Thread):
def __init__(self, number):
super(InsertionThread, self).__init__()
self.number = number
def run(self):
conn = sqlite3.connect('yourdb.db', timeout=5)
conn.execute('CREATE TABLE IF NOT EXISTS threadcount (threadnum, count);')
conn.commit()
for i in range(1000):
conn.execute("INSERT INTO threadcount VALUES (?, ?);", (self.number, i))
conn.commit()
# create as many of these as you wish
# but be careful to set the timeout value appropriately: thread switching in
# python takes some time
for i in range(2):
t = InsertionThread(i)
t.start()
Если вам нравится SQLite, или у вас есть другие инструменты, которые работают с базами данных SQLite, или вы хотите заменить файлы CSV на файлы базы данных SQLite, или вам нужно что-то редкое, например, межплатформенный IPC, то SQLite - отличный инструмент, который очень подходит для цель. Не позволяйте себе использовать другое решение, если оно не подходит!