在Python中使用多线程查询MySQL数据并返回结果可以通过使用threading
库实现。以下是一个简单的示例:
import threading
import pymysql
import time
# 创建线程本地数据存储对象
local_data = threading.local()
# 定义数据库连接函数
def get_connection():
if not hasattr(local_data, 'conn'):
local_data.conn = pymysql.connect(
host='your_host',
user='your_user',
password='your_password',
database='your_database',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor
)
return local_data.conn
# 定义查询函数
def query_data(query, result_list):
conn = get_connection()
start_time = time.time()
try:
with conn.cursor() as cursor:
cursor.execute(query)
result = cursor.fetchall()
result_list.extend(result)
except Exception as e:
print(f"Error: {e}")
finally:
conn.close()
end_time = time.time()
print(f"Thread execution time: {end_time - start_time} seconds")
# 其他部分保持不变
在这个示例中,我们首先建立了一个MySQL连接,然后定义了一个查询函数query_data
,该函数接受一个查询语句和一个存储结果的列表作为参数。函数将执行查询并将结果存储到列表中。
然后,我们定义了两个不同的查询语句query1
和query2
,以及两个存储结果的列表result_list1
和result_list2
。
接下来,我们创建了两个线程thread1
和thread2
,分别用于执行两个不同的查询。每个线程都调用了query_data
函数,并传递了相应的查询语句和结果列表。
最后,我们启动了这两个线程,并使用thread1.join()
和thread2.join()
等待它们执行完毕。一旦线程执行完毕,我们就可以打印出结果。
请注意,在实际应用中,你可能需要根据需要修改数据库连接参数、查询语句以及相应的条件。同时,要确保在多线程操作时,线程之间的数据库连接管理是安全的,这可以通过连接池等技术来实现。