嗨,所有的Python熊猫大师。我正在寻找一种方法来与Python并行运行一些SQL,返回几个Pandas数据帧。我有类似于下面的代码,对一个mssqlserver数据库连续运行4个SQL查询。其中两个查询的执行时间比IO(网络)要长得多,所以我认为并行化可以使代码运行快2倍。有没有一种简单的方法可以并行执行查询?在
理想情况下,我希望能够读取项目子目录中的所有*.sql文件,然后启动并行运行的查询,并以易于使用的格式(list?)返回四个数据帧用于进一步的操作(索引、连接、聚合)。在
提前谢谢你, 兰德尔
# imports
import ceODBC
import numpy as np
import pandas as pd
import pandas.io.sql as psql
from ConfigParser import ConfigParser
import os
import glob
# db connection string
cnxn = 'DRIVER={SQL Server Native Client 11.0}; SERVER=<servername>; DATABASE=<dname>; Trusted_Connection=Yes'
# directories (also should be moved to config)
dataDir = os.getcwd() + '\\data\\'
sqlDir = os.getcwd() + '\\sql\\'
# read sql from external .sql files. Possible to read all *.sql files in a sql dir into a list (or other structure...)?
with open(sqlDir + 'q1.sql', 'r') as f: q1sql = f.read()
with open(sqlDir + 'q2.sql', 'r') as f: q2sql = f.read()
with open(sqlDir + 'q3.sql', 'r') as f: q3sql = f.read()
with open(sqlDir + 'q4.sql', 'r') as f: q4sql = f.read()
# Connect to db, run SQL, assign result into dataframe, close connection.
cnxn = ceODBC.connect(cnxn)
cursor = cnxn.cursor()
# execute the queries and close the connection. Parallelize?
df1 = psql.frame_query(q1sql, cnxn)
df2 = psql.frame_query(q2sql, cnxn)
df3 = psql.frame_query(q3sql, cnxn)
df4 = psql.frame_query(q4sql, cnxn)
# close connection
cnxn.close()
在N个线程中使用N个连接。然后连接theads和proces结果。在
每个文件在单独的线程中执行。结果存储在一个变量中。在
具有
^{pr2}$with
语句的函数等价:multiprocessing.Pool
很容易分发繁重的任务,但它本身有更多的IO操作。在相关问题 更多 >
编程相关推荐