我有一个Python脚本,它循环访问每个文件夹中的文件夹,并对我们的Redshift群集执行sql文件(使用psycopg2)。下面是做循环中的代码(注意:这只是正常的是只需要几分钟的时间来执行查询):执行长时间运行的查询时,即使查询完成后,Python脚本仍会挂起
for folder in dir_list:
#Each query is stored in a folder by group, so we have to go through each folder and then each file in that folder
file_list = os.listdir(source_dir_wkly + "\\" + str(folder))
for f in file_list:
src_filename = source_dir_wkly + "\\" + str(folder) + "\\" + str(f)
dest_filename = dest_dir_wkly + "\\" + os.path.splitext(os.path.basename(src_filename))[0] + ".csv"
result = dal.execute_query(src_filename)
result.to_csv(path_or_buf=dest_filename,index=False)
execute_query是存储在另一个文件的方法:
def execute_query(self, source_path):
conn_rs = psycopg2.connect(self.conn_string)
cursor = conn_rs.cursor(cursor_factory=psycopg2.extras.RealDictCursor)
sql_file = self.read_sql_file(source_path)
cursor.execute(sql_file)
records = cursor.fetchall()
conn_rs.commit()
return pd.DataFrame(data=records)
def read_sql_file(self, path):
sql_path = path
f = open(sql_path, 'r')
return f.read()
我有几个查询需要大约15分钟才能执行(因为我们的Redshift集群中的数据量很大,所以并不常见),并且它们在SQL Workbench中执行得很好。我可以在AWS Console中看到查询已完成,但脚本只是挂起,不会将结果转储到csv文件,也不会继续到文件夹中的下一个文件。
我没有指定任何超时。还有什么我失踪?
我会添加一些调试日志记录到脚本来查看它实际挂起的位置。 – 2014-11-05 16:29:44