Я использую библиотеку Metpy для расчетов погоды. Я использую библиотеку многопроцессорности для их параллельного запуска, но возникают редкие исключения, которые полностью останавливают работу программы. Я не могу предоставить минимальный воспроизводимый пример, потому что не могу воспроизвести проблемы с функциями библиотеки Metpy, а также потому, что до возникновения проблемы выполняется огромный объем кода, который я не могу разместить здесь.
Я хочу знать, как написать многопроцессорный код, чтобы сообщить функцииpool.starmap о необходимости пройти PASS, если она обнаружит ошибку. На первом этапе моего кода создается список аргументов, который затем передается в функциюpool.starmap вместе с функцией metpy (в данном случае metpy.ccl). Список аргументов metpy.ccl включает список уровней давления, температуры воздуха и значений точки росы.
Код: Выделить всё
ccl_pooled = pool.starmap(mpcalc.ccl, ccl_argument_list)
Я пытался написать обобщенную функцию, которая бы принимала переданную мной функцию metpy и сообщала ей о необходимости передать ее при обнаружении ошибки.
Код: Выделить всё
def run_ccl(p,t,td):
try:
result = mpcalc.ccl(p,t,td)
except IndexError:
pass
Можно ли мне написать функцию «run_ccl», чтобы я мог проверять наличие ошибок в исходной строке кода - примерно так:
Код: Выделить всё
ccl_pooled = pool.starmap(run_ccl, ccl_argument_list)
Если нет, то как лучше всего это сделать? РЕДАКТИРОВАТЬ: Чтобы уточнить, эти списки аргументов состоят из тысяч точек данных. Я хочу передать точку данных, которая вызывает проблему (и ввести nan в результат «ccl_pooled» для этой точки данных) и продолжить работу.
Подробнее здесь:
https://stackoverflow.com/questions/793 ... ltiprocess