mysql - 使用python中的线程在Mysql上同时运行多个查询

标签 mysql python-3.x multithreading multiprocessing

我有多个查询需要使用 python 在 MySQL 数据库上执行。 如果我有 3 个查询,每个查询运行 5 分钟 然后执行所有查询大约需要 15 分钟

是否可以使用线程同时执行/激发所有 3 个查询,以便将执行时间减少到大约 5 分钟?

当我尝试多线程或多处理时,我得到的错误是

OperationalError: 2013 (HY000): 在查询期间丢失与 MySQL 服务器的连接

def connect(host,username,passwor,db_name):
    mysql_db = mysql.connector.connect(
          host = host,
          user = username,
          passwd = password,
          database = db_name
            )
    cursor = mysql_db.cursor()
    return(cursor)
        
def execute_query(cursor,query):
    cursor.execute(query)
    res = cursor.fetchall()
    que.put(res)
    
query_1 = "select count(*) from db.table1"
query_2 = "select count(*) from db.table2"
query_3 = "select count(*) from db.table3"

cursor = connect((host,username,passwor,db_name):
threads = []
que = Queue.Queue()

threads.append(Thread(target = execute_query, args = (cursor,query1,)))
threads.append(Thread(target = execute_query, args = (cursor,query2,)))
threads.append(Thread(target = execute_query, args = (cursor,query3,)))

for thread in threads:
    thread.start()
    
for thread in threads:
    threads.join()
    res = que.get()

最佳答案

你可以像这样调整你的“连接”功能:

def connect(host,username,passwor,db_name):
    mysql_db = mysql.connector.connect(
          host = host,
          user = username,
          passwd = password,
          database = db_name
            )
    cursor = mysql_db.cursor()
   #####
    cursor.execute("SET SESSION MAX_EXECUTION_TIME=50000")
   #####
    return(cursor)

就在 cursor = mysql_db.cursor() 之后

关于mysql - 使用python中的线程在Mysql上同时运行多个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62509787/

相关文章:

MYSQL 获取所有未执行操作的用户电子邮件地址的列表

python - 如何用样本列表计算字符串中的字母数?

python - 将 NaN 添加到集合时行为不一致的原因

java - 如何立即终止套接字 IO 操作上的线程阻塞?

C-Linux 内核 : Closing two kthreads freezes machine

php - Laravel onDelete 级联多对多关系

php - 从 MySQL 获取列并在 PHP 中显示

php - JSONException 索引超出范围 [0..1)

python-3.x - Gensim doc2vecmost_similar相当于获取完整文档

c++ - 使用带条件变量的锁