Sto scrivendo un'app python che indica a un database di eseguire varie istruzioni di elaborazione su tabelle partizionate. L'elaborazione può richiedere un tempo sufficiente per il timeout, quindi accento le mie chiamate al database con try:... except:
di blocchi come:
while True:
try:
process_one(table, logger, cursor)
except OperationalError as oe:
logger.error(oe)
con, cursor = retry_connection(logger, dbset)
else:
break
Dove process_one()
è una chiamata a una funzione di PostgreSQL come:
def process_one(table, logger, cursor):
logger.info('Processing table %s', table)
cursor.execute('SELECT do_something(%(table)s)', {'table':table})
Ma se ho una sequenza di funzioni di elaborazione da eseguire e non voglio ripetere una procedura in caso di un problema di connessione questo si trasformerebbe in:
while True:
try:
process_one(...)
....
while True:
try:
process_two(...)
....
L'ideale di DRY sarebbe avere una funzione che eseguisse il ciclo while True, try, except, break
e assuma diverse funzioni di elaborazione come parametro?
def try_process(process, processparams):
while True:
try:
process(processparams)
except OperationalError as oe:
...