Задать вопрос
@mad_god

Какие лучшие примеры многопоточной работы Python скрипта с базой sqlite?

Нужен пример, показывающий, как правильно обрабатывать ошибки, если транзакция была не успешна.
Будет ли прирост от использования нескольких потоков в работе с базой sqlite?
Если я запускаю один скрипт, то обработка длится 101 минуту, с двумя скриптами - 62 минуты.
Четыре скрипта работают 52 минуты, но если несколько скриптов работают без обработки ошибок, то база получается меньшего размера, не все данные успешно добавляются.

Чувствую, что делаю неправильно, поэтому спрашиваю и одновременно гуглю. Может, имеет смысл лочить базу на момент записи и ставить цикл, который дожидается анлока?
Нужен такой пример, который используется, например, в открытом проекте, как оно по-человечески делается.
  • Вопрос задан
  • 1011 просмотров
Подписаться 2 Оценить 4 комментария
Решения вопроса 1
zoonman
@zoonman
⋆⋆⋆⋆⋆
Может стоит использовать MariaDB? Или индексы создать. У вас явные проблемы с блокировками.

#!/usr/bin/python
# -*- coding: utf-8 -*-

import sqlite3 as lite
import sys

try:
    con = lite.connect('test.db')

    cur = con.cursor()  

    cur.executescript("""
        DROP TABLE IF EXISTS Cars;
        CREATE TABLE Cars(Id INT, Name TEXT, Price INT);
        INSERT INTO Cars VALUES(1,'Audi',52642);
        INSERT INTO Cars VALUES(2,'Mercedes',57127);
        INSERT INTO Cars VALUES(3,'Skoda',9000);
        INSERT INTO Cars VALUES(4,'Volvo',29000);
        INSERT INTO Cars VALUES(5,'Bentley',350000);
        INSERT INTO Cars VALUES(6,'Citroen',21000);
        INSERT INTO Cars VALUES(7,'Hummer',41400);
        INSERT INTO Cars VALUES(8,'Volkswagen',21600);
        """)

    con.commit()
    
except lite.Error, e:
    
    if con:
        con.rollback()
        
    print "Error %s:" % e.args[0]
    sys.exit(1)
    
finally:
    
    if con:
        con.close()

Взял отсюда zetcode.com/db/sqlitepythontutorial
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы