QThread не может открыть базу данных sqlite3 при доступе к пути базы данных с помощью QFileDialog - PullRequest
0 голосов
/ 17 января 2019

У меня есть QThread, который отслеживает содержимое БД, и если произошли изменения, он обновляет информацию в приложении и функцию, которая просматривает другие БД, если это необходимо изменить, и именно здесь я увидел проблему как он останавливает обновление информации и загрузку других моих модулей, если все еще есть некоторые выгруженные модули, которые используют базу данных, потому что не может получить доступ к базе данных, когда QFileDialog находится непосредственно в папке / пути к базе данных, которую она использует.

Я использовал блок try и работает, но он все еще не позволяет моему приложению продолжать загружать другие модули, если ему необходим доступ к БД.

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

Вот небольшой пример.

import sys, time, sqlite3
from PyQt4.QtCore import QThread
from PyQt4.QtGui import QApplication, QMainWindow, QFileDialog

class testThread(QThread):
    def __init__(self, parent=None):
        QThread.__init__(self, parent)
        self.parent = parent

    def run(self):
        while True:
            conn = None
            while conn is None:
                try:
                    conn = sqlite3.connect("path\\of\\db", 10.0)
                except Exception:
                    import traceback
                    traceback.print_exc()
                    time.sleep(1.0)

            time.sleep(1.0)


class testMain(QMainWindow):
    def __init__(self, parent=None):
        super(testMain, self).__init__(parent)
        testThread_obj = testThread(self)
        testThread_obj.start()
        new_path = unicode(QFileDialog.getOpenFileName(None, 'Select Database', "path\\of\\db", "(*.db)")).replace("/", "\\")

def run():

    app = QApplication(sys.argv)
    GUI = testMain()
    sys.exit(app.exec_())

run()

Можно ли разрешить QThread доступ к БД, даже если QFileDialog находится на пути текущего БД? Или это просто так, как я не вижу ничего в документации, которая упоминает это.

...