【发布时间】:2018-10-27 06:05:30
【问题描述】:
我有一个服务器允许(管理员)创建、删除或编辑其他用户的详细信息, 我已经在函数内的光标旁边创建了数据库:
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
每当我编辑数据库时,我都会在我的程序“With global_lock:”中使用全局锁。
提前谢谢你
【问题讨论】:
标签: python sqlite python-multithreading