生成 多线程数据库 代码
时间: 2024-01-06 22:06:51 浏览: 69
一个多线程访问数据库的代码
4星 · 用户满意度95%
以下是一个基本的多线程数据库连接的代码示例:
```python
import threading
import mysql.connector
class Database:
def __init__(self, host, user, password, database):
self.lock = threading.Lock()
self.conn = mysql.connector.connect(
host=host,
user=user,
password=password,
database=database
)
def execute_query(self, query, params=None):
with self.lock:
cursor = self.conn.cursor()
if params:
cursor.execute(query, params)
else:
cursor.execute(query)
result = cursor.fetchall()
cursor.close()
return result
```
在这个示例中,我们创建了一个名为 `Database` 的类,它使用 `mysql.connector` 模块连接到 MySQL 数据库。我们在类的构造函数中创建了一个锁,以确保线程安全。然后,我们定义了一个 `execute_query` 方法,该方法可以执行任何 SQL 查询并返回结果。我们使用 `with self.lock:` 语句来确保每个线程在执行查询时都能够获得锁,以避免竞争条件。最后,我们使用 `cursor.close()` 关闭游标以释放资源。
在使用此类时,您可以创建多个 `Database` 对象,并在多个线程中使用它们执行查询。例如:
```python
db1 = Database('localhost', 'root', 'password', 'mydb')
db2 = Database('localhost', 'root', 'password', 'mydb')
def thread_func(db):
result = db.execute_query("SELECT * FROM mytable")
# 处理查询结果
t1 = threading.Thread(target=thread_func, args=(db1,))
t2 = threading.Thread(target=thread_func, args=(db2,))
t1.start()
t2.start()
t1.join()
t2.join()
```
在这个示例中,我们创建了两个 `Database` 对象 `db1` 和 `db2`,并在两个线程中使用它们执行相同的查询。我们使用 `threading.Thread` 类创建两个线程 `t1` 和 `t2`,并使用 `args` 参数将 `db1` 和 `db2` 传递给线程函数。然后,我们使用 `start` 方法启动线程,并使用 `join` 方法等待它们完成。
阅读全文