использование sqlite3 в многопоточности - PullRequest
0 голосов
/ 06 июня 2018

Я пишу серверную программу для многих клиентов и использую потоки.Каждый клиент может выполнить действие, которое требует записи или чтения из базы данных sqlite.Нужно ли открывать и закрывать соединение для каждого действия или открывать базу данных один раз, чтобы все клиенты могли использовать одно соединение?Пример для моего кода:

    if command == "s":
        conn = open_database() #connect to the database
        cursor = conn.cursor()
        cursor.execute('''SELECT s FROM users WHERE username=?''', (username,))
        s= cursor.fetchone()[0]
        conn.close()
        if not s:
            s= "Empty!"
        clientsock.send(str(s))

Я также использовал команду вставки в базу данных.

1 Ответ

0 голосов
/ 06 июня 2018

Одно соединение имеет ровно одну транзакцию, поэтому ваша программа может взорваться, когда несколько потоков попытаются использовать одно и то же соединение без блокировки всех транзакций.

Использовать одно соединение на поток.

(Если вам нужен высокий параллелизм, SQLite может оказаться не лучшим выбором .)

...