Как правильно использовать операторы SQLite с потоками в Python - PullRequest
0 голосов
/ 07 июля 2019

Я пытаюсь запустить два бесконечных цикла последовательно, и у обоих из них есть вызовы методов к классу базы данных с операторами SQLite.

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

def method_a():
    while True:
        last, timestamp, symbol = conn_api.getmetrics()
        db.insertdb(last, timestamp, symbol) # first SQLite stmt of method_a
        print("Do stuff")
        if db.get_row_count() > 200:    # second SQLite statement of method_a
            db.delete_row() # third SQLite statement of method_a
        time.sleep(1)


def metod_b():
    while True:
        if db.get_row_count() > 200:   # first SQLite stmt of method_b
            print("Do more stuff")
        time.sleep(10)


if __name__ == "__main__":
    t1 = Thread(target=method_a)
    t2 = Thread(target=method_b)
    t1.setDaemon(True)
    t2.setDaemon(True)
    t1.start()
    t2.start()

Я получаю следующую ошибку: sqlite3.ProgrammingError: объекты SQLite, созданные в потоке, могут использоваться только в этом же потоке. Объект был создан в идентификаторе потока 6556, а это идентификатор потока 9656.

Я надеюсь, что каждую секунду получаю вывод "Делай вещи" и "Делай больше вещей" каждые 10 секунд. а также вставка в базу данных, чтение из базы данных и удаление из базы данных.

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