python多线程写入数据库
在 Python 中,可以使用多线程来实现数据写入数据库的任务,从而提高写入效率。以下是一个简单的多线程写入数据库示例代码:
import sqlite3 import threading import time # 定义数据库名称和表名称 db_name = 'test.db' table_name = 'data' # 定义数据列表 data_list = [(i,) for i in range(100)] # 定义线程数量 num_threads = 4 # 创建数据库连接和游标对象 conn = sqlite3.connect(db_name) cursor = conn.cursor() # 创建数据表 cursor.execute('CREATE TABLE IF NOT EXISTS {} (id INTEGER PRIMARY KEY)'.format(table_name)) # 定义线程函数 def write_thread(data): cursor.executemany('INSERT INTO {} (id) VALUES (?)'.format(table_name), data) conn.commit() # 创建线程列表并启动 threads = [] for i in range(num_threads): start = int(len(data_list) / num_threads * i) end = int(len(data_list) / num_threads * (i+1)) thread = threading.Thread(target=write_thread, args=(data_list[start:end],)) thread.start() threads.append(thread) # 等待线程执行完成 for thread in threads: thread.join() # 关闭数据库连接 conn.close() print('写入完成')
在这个示例中,我们首先定义了数据库名称和表名称,并创建了一个数据列表用于写入数据库。然后定义了线程数量 num_threads,并创建了数据库连接和游标对象用于操作数据库。
在线程函数 write_thread 中,我们使用 executemany 方法向数据库中写入数据,并使用 commit 方法提交事务。需要注意的是,不同的线程写入的数据应该不重叠,因此需要根据线程编号来划分数据块。
在主程序中,我们首先创建线程列表并启动,然后使用 join() 方法等待线程执行完成,并在所有线程执行完成后输出写入完成的信息。
需要注意的是,在使用多线程写入数据库时,需要确保线程之间不会出现数据竞争等问题,可以使用锁机制来实现线程同步。同时,在写入大量数据时,也需要注意内存占用等问题。
相关文章