Estou usando a biblioteca metpy para fazer cálculos de clima. Estou usando a biblioteca multiprocessing para executá-los em paralelo, mas recebo raras exceções, que param completamente o programa. Não consigo fornecer um exemplo mínimo e reproduzível porque não consigo replicar os problemas com as funções da biblioteca metpy e porque há uma quantidade enorme de código que é executado antes que o problema ocorra e que não posso colocar aqui.
Quero saber como escrever código de multiprocessamento para dizer à função pool.starmap para PASSAR se encontrar um erro. O primeiro passo no meu código produz uma lista de argumentos, que então é passada para a função pool.starmap, junto com a função metpy (metpy.ccl, neste caso). A lista de argumentos para metpy.ccl inclui uma lista de níveis de pressão, temperaturas do ar e valores de ponto de orvalho.
ccl_pooled = pool.starmap(mpcalc.ccl, ccl_argument_list)
Tentei escrever uma função generalizada que receberia a função metpy que eu passasse para ela e diria para ela passar quando encontrasse um erro.
def run_ccl(p,t,td):
try:
result = mpcalc.ccl(p,t,td)
except IndexError:
pass
Existe uma maneira de escrever a função "run_ccl" para que eu possa verificar se há erros na minha linha de código original - algo assim:
ccl_pooled = pool.starmap(run_ccl, ccl_argument_list)
Se não, qual seria a melhor maneira de fazer isso? EDIT: Para esclarecer, essas listas de argumentos têm milhares de pontos de dados. Quero passar o ponto de dados que causa o problema (e inserir um nan no resultado, "ccl_pooled", para esse ponto de dados) e continuar.