MySQL select 并行请求 (python)
MySQL select request in parallel (python)
我看到一个"similar"postExecuting MySQL SELECT * query in parallel,买我的问题不一样,这个也没有人回答,所以我猜不是重复的。
我正在尝试并行执行 MySQL select 请求。原因是因为我需要快速响应。当我也并行连接时,我设法创建了请求,但是由于连接比实际的 select
花费更多的时间,因此连接一次并并行执行 select
会更快。
我的做法:
import mysql.connector
import multiprocessing
def func(id):
return GetFasta(id, cnx).sequence()
cnx = mysql.connector.connect(user='U_NAME', host='IP_ADDR', database='DB_NAME')
p = multiprocessing.Pool()
for x in p.imap_unordered(func, ["Q32P44", "ASD"]):
print x
p.close()
p.join()
cnx.close()
GetFasta
是一个 Class
,它按预期工作,需要一个连接器和一个 ID,并用它们做一个简单的 SELECT
。
如果我执行此脚本,解释器将冻结,我必须手动将其终止。我想这不是那么简单,或者不可能 select
与一个连接器并行。
是吗?
任何解决方法?
经过大量研究,我找到了 "solution"。其实是不可能的。 MySQL 不支持来自同一 用户 连接 的并行查询。这是绝对不可能的,也没有计划添加这个。
你能得到的最好的就是我实现它的方式,所以并行连接也是如此。
在一些其他类型的数据库中这是可能的,但现在我会坚持使用 MySQL 并使用并行连接方法
我看到一个"similar"postExecuting MySQL SELECT * query in parallel,买我的问题不一样,这个也没有人回答,所以我猜不是重复的。
我正在尝试并行执行 MySQL select 请求。原因是因为我需要快速响应。当我也并行连接时,我设法创建了请求,但是由于连接比实际的 select
花费更多的时间,因此连接一次并并行执行 select
会更快。
我的做法:
import mysql.connector
import multiprocessing
def func(id):
return GetFasta(id, cnx).sequence()
cnx = mysql.connector.connect(user='U_NAME', host='IP_ADDR', database='DB_NAME')
p = multiprocessing.Pool()
for x in p.imap_unordered(func, ["Q32P44", "ASD"]):
print x
p.close()
p.join()
cnx.close()
GetFasta
是一个 Class
,它按预期工作,需要一个连接器和一个 ID,并用它们做一个简单的 SELECT
。
如果我执行此脚本,解释器将冻结,我必须手动将其终止。我想这不是那么简单,或者不可能 select
与一个连接器并行。
是吗?
任何解决方法?
经过大量研究,我找到了 "solution"。其实是不可能的。 MySQL 不支持来自同一 用户 连接 的并行查询。这是绝对不可能的,也没有计划添加这个。
你能得到的最好的就是我实现它的方式,所以并行连接也是如此。
在一些其他类型的数据库中这是可能的,但现在我会坚持使用 MySQL 并使用并行连接方法