아래 코드는 동시에 두 개의 데이터베이스를 호출해야합니다. 나는 ThreadPool로 해보려고했지만 약간 어려움에 처해있다. pool.apply_async는 여러 개의 매개 변수를 허용하지 않는 것 같습니다. 따라서 튜플에 넣은 다음 풀어 봅니다. 이것이 올바른 접근 방법입니까 아니면 더 나은 해결책입니까?여러 매개 변수가있는 pool.apply_async
튜플 목록은 params = ...에 정의되어 있으며 튜플에는 3 개의 항목이 있습니다. 3 번 매개 변수를 사용할 때마다 함수를 두 번 호출해야합니다. 당신이 당신의 get_sql의 첫 번째 라인으로
print params
을 추가하는 경우
def get_sql(self, *params): # run with risk
self.logger.info(len(params))
sql=params[0]
schema=params[1]
db=params[2]
self.logger.info("Running SQL with schema: {0}".format(schema))
df = pd.read_sql(sql, db)
return df
def compare_prod_uat(self):
self.connect_dbrs_prod_db()
self.connect_dbrs_uat_db()
self.logger.info("connected to UAT and PROD database")
sql = """ SELECT * FROM TABLE """
params = [(sql, "DF_RISK_PRD_OWNER", self.db_dbrs_prod), (sql, "DF_RISK_CUAT_OWNER", self.db_dbrs_uat)]
pool = ThreadPool(processes=2)
self.logger.info("Calling Pool")
result_prod = pool.apply_async(self.get_sql, (sql, "DF_RISK_PRD_OWNER", self.db_dbrs_prod))
result_uat = pool.apply_async(self.get_sql, (sql, "DF_RISK_CUAT_OWNER", self.db_dbrs_uat))
# df_prod = self.get_sql(sql, "DF_RISK_PRD_OWNER", self.db_dbrs_prod)
# df_cuat = self.get_sql(sql, "DF_RISK_CUAT_OWNER", self.db_dbrs_uat)
self.logger.info("Get return from uat")
df1 = result_uat.get() # get return value from the database call
self.logger.info("Get return from prod")
df2 = result_prod.get() # get second return value from the database call
return df1, df2
당신이 제안한대로 SQL을 제거했지만 이제는 함수가 두 번 호출되어야하는 param의 단 3 개의 항목 대신 3 개의 튜플 쌍 항목이있는 목록으로 끝납니다. – Nickpick
지금 생성하는 출력의 예를 들려 줄 수 있습니까? – Hannu
나는 이제 – Nickpick