当前位置: 首页 > 知识库问答 >
问题:

跨多线程使用sql

夏侯涵映
2023-03-14
def DBSetup():
    global schoolDBConn, schoolDBCursor
    print("Setting up databases")
    schoolDBConn = sqlite3.connect("SCHOOL_DB.db")
    schoolDBCursor = schoolDBConn.cursor()
    schoolDBCursor.execute(
                            """
                               CREATE TABLE IF NOT EXISTS USER_DETAILS 
                               (
                               username text,
                               password text,
                               clearance int,
                               classes int
                               )
                            """
                            )
    schoolDBCursor.execute(   #line 300
                            """
                            CREATE TABLE IF NOT EXISTS CLASSES  
                            (
                            className text,
                            supervisor text,
                            assignmentName text
                            )
                            """
                            )
    schoolDBCursor.execute(
                            """
                            CREATE TABLE IF NOT EXISTS ASSIGNMENT 
                            (
                            setDate text,
                            dueDate text,
                            assignmentInfo text,
                            supervisor text
                            )  
                            """
                             )
if __name__ == "__main__":
    DBSetup()
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    s.bind((host, port))
    s.listen(1)
    while True:
        conn, addr = s.accept()
        connThread = Thread(target=handler, args=(conn, addr))
        connThread.daemon = True
        connThread.start()
SQLITE3 ERROR:

SQLite objects created in a thread can only be used in that same thread.The object was created in thread id 9628 and this is thread id 12400

提前谢谢你

共有1个答案

薛宜
2023-03-14

可以将check_same_thread参数设置为false。在您的案例中,如下所示:

schoolDBConn = sqlite3.connect("SCHOOL_DB.db", check_same_thread=False)

从文档中:

默认情况下,check_same_threadtrue,只有创建线程可以使用连接。如果设置false,则返回的连接可能在多个线程之间共享。当使用具有相同连接的多个线程时,写操作应该由用户序列化,以避免数据损坏。

 类似资料:
  • 问题内容: 我想制作一个用Python编写并使用SQLAlchemy的数据库应用程序编程接口(或其他任何数据库连接器,如果被告知将SQLAlchemy用于此类任务不是好方法)。该设置是在Linux或BSD上运行的MySQL服务器,以及在Linux或BSD机器(外部或本地)上运行的Python软件。 基本上我想做的是为每个连接生成一个新线程,并且该协议将是自定义且非常简单的,尽管对于每个请求,我想打

  • 问题内容: 我正在使用这些功能在画布上绘制小圆圈: 这是绘制圆圈的功能: 这个创建画布和圆圈: 我称这些行来运行项目: 什么是执行正确的方法,并在不同的线程? 我已经尝试了以下方法,但无法使其正常工作。: 有人可以告诉我如何运行这些线程吗? 问题答案: 当需要此功能时,您要做的是通过将事件置于线程共享的队列中来安排要执行的事件。这样,在给定线程中,您可以通过排队指定要运行“ create(50,…

  • 我正在画布上用以下函数绘制小圆圈: 这是将绘制圆圈的函数: 这个创造了画布和圆圈: 我调用以下行来运行项目: 在不同的线程中执行和的正确方法是什么? 我尝试了以下方法,但无法使其起作用: 有人能告诉我如何运行这些线程吗?

  • 本文向大家介绍C#多线程与跨线程访问界面控件的方法,包括了C#多线程与跨线程访问界面控件的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#多线程与跨线程访问界面控件的方法。分享给大家供大家参考。具体分析如下: 在编写WinForm访问WebService时,常会遇到因为网络延迟造成界面卡死的现象。启用新线程去访问WebService是一个可行的方法。 典型的,有下面的启动新线程示例

  • 我想编译/配置Caffe,以便当我用它训练人工神经网络时,训练是多线程的(只有CPU,没有GPU)。如何用Caffe启用多线程?我在Ubuntu 14.04 LTS x64上使用Caffe。