Используя python 3.6, у меня возникает такая проблема: (1) есть цикл joblib.Parallel
над смущающе параллельными заданиями (2) сами задания являются довольно трудоемкими собственными объектами c ++, которые иногда сегментируются и код которых я не могу изменить.
Чтобы защититься от ошибок, я попытался обернуть сами задания в многопроцессорный процесс.К сожалению, сам Python выдает ошибку подтверждения с daemonic processes are not allowed to have children
в этом решении.
Поэтому я взял опубликованное здесь решение и попытался унаследовать от Process: https://stackoverflow.com/a/8963618/614684
Это тоже не сработалои поэтому я нашел следующее решение, которое РАБОТАЕТ:
class NoDaemonProcess(multiprocessing.Process):
def __init__(self, group=None, target=None, name=None, args=(), kwargs={},
*, daemon=None):
super(NoDaemonProcess, self).__init__(group, target, name, args, kwargs, daemon=daemon)
if 'daemon' in multiprocessing.process._current_process._config:
del multiprocessing.process._current_process._config['daemon']
self._config = multiprocessing.process._current_process._config.copy()
# make 'daemon' attribute always return False
def _get_daemon(self):
return False
def _set_daemon(self, value):
pass
daemon = property(_get_daemon, _set_daemon)
По сути, я изменяю глобальное состояние многопроцессорного пакета, чтобы удалить тот факт, что текущий процесс является демоном.
Есть ли лучший способ сделать это?Буду признателен за любую помощь в создании этого более надежного и надежного.