python futures.as_completed перестает отвечать после ошибки - PullRequest
0 голосов
/ 27 марта 2020

У меня есть некоторый код, использующий фьючерсы, который работает и обеспечивает вывод, пока я не нажму и не произойдет ошибка, а затем вывод прекратится. Остальные процессы продолжают выполняться (я вижу, как они выполняются в базе данных), я просто не могу зафиксировать результат. Чего мне не хватает?

from concurrent import futures
import oracle_manager
import os

sql_statements=['select count(*) from PS_SCC_NTF_PREF',
'select count(*) from PS_SCC_STN_LTR_TBL',
'select count(*) from PS_SCC_TM_TRAN_AGR',
'select count(*) from PS_SCRTY_TBL_INST',
'select count(*) from PS_SCTN_CMBND',
'select count(*) from PS_SCTN_CMBND_TBL',
'select count(*) from PS_SEC_ITEM_CLS',
'select count(*) from PS_SESSION_TBL',
...]

def run_sql(sql):
  temp_connection = oracle_manager.OracleConnection(un, pw, tns)
  value = temp_connection.execute_count(sql)
  return (value, os.getpid())

worker_pool = futures.ProcessPoolExecutor(5)
wait_for = [worker_pool.submit(run_sql, sql_statement) for sql_statement in sql_statements] 

for f in futures.as_completed(wait_for):
  try:
    print(f.result())
  except Exception as e:
    print(e)
((1069,), 23010)
((130464,), 23013)
((40220,), 23012)
((296372,), 23009)
((930954,), 23011)
((13836,), 23012)
((19707,), 23009)
((52130,), 23010)
((130707,), 23013)
((21,), 23011)
((276,), 23009)
((53157,), 23012)
((111,), 23009)
((381,), 23009)
An exception occurred running the following sql statement: "select count(*) from PS_SF_ACCTG_LN"
Oracle-Error-Code/Message: 600  ORA-00600: internal error code, arguments: [kskqgetserviceid:nosvcidpdb1], [3], [0], [], [], [], [], [], [], [], [], []

Спасибо за любую помощь!

1 Ответ

0 голосов
/ 27 марта 2020

UGH. После более тщательной проверки моего oracle_manager я обнаружил, что поместил выход (1) в блок try / исключением в моем методе execute_count, когда выполнял некоторую отладку. Удаление выхода решило проблему.

...