Параллельные соединения для Teradata с использованием concurrent.future - PullRequest
0 голосов
/ 13 мая 2019

Я пытаюсь загрузить данные с использованием Python из TeraData, но текущий процесс выполняется в течение 12 часов из-за сложных объединений SQL. Я пытался использовать concurrent.futures, но я получаю сообщение об ошибке «Процесс в пуле процессов был внезапно прерван во время работы или ожидания будущего». Я новичок в этом и все еще пытаюсь понять это. питон 3,7

  import pyodbc 
  import pandas as pd
  from concurrent.futures import ProcessPoolExecutor

   def chunker(seq, size):
         return (seq[pos:pos + size] for pos in range(0, len(seq), size))


  def task():


      for group in chunker(fDocNum3, 10):  #fDocNum3 consists of data which I break into chuncks to use as input for SQL query


    dataList = ""

    dfToList = group['Column_name'].tolist()
    for i in dfToList:
           dataList += "'"+i+ "'" + ","
    dataList=dataList[0:-1]

    try:
        DataSet1= pd.read_sql(("SOME COMPLEX QUERY where column in ( "+ 
        dataList + ")",TDconn) #EDIT .. i hope this makes more sense. 


        return DataSet1

    except:
        dfToListEx = dfToListEx.append(dfToList, ignore_index=True)
        continue


   def main():
     DataSet1 = pd.DataFrame() 
     #executor = ProcessPoolExecutor(max_workers=4)
   with ProcessPoolExecutor(max_workers=3) as executor:
        future = executor.submit(task)
        fDataSet = fDataSet.append(DataSet1, ignore_index=True) 
   #print(future.done())
   print(future.result())


   if __name__ == '__main__':
        main()
...