Я создаю процесс для выполнения функции.Если функция вызывает исключение, я не могу его перехватить.Ниже приведен пример кода.
from multiprocessing import Process
import traceback
import time
class CustomTimeoutException(Exception):
pass
def temp1():
time.sleep(5)
print('In temp1')
raise Exception('I have raised an exception')
def main():
try:
p = Process(target=temp1)
p.start()
p.join(10)
if p.is_alive():
p.terminate()
raise CustomTimeoutException('Timeout')
except CustomTimeoutException as e:
print('in Custom')
print(e)
except Exception as e:
print('In exception')
print(e)
if __name__ == "__main__":
main()
Когда я запускаю приведенный выше код, исключение, вызванное в temp1, не перехватывается.Ниже приведен пример вывода
In temp1
Process Process-1:
Traceback (most recent call last):
File "/usr/lib/python3.5/multiprocessing/process.py", line 249, in _bootstrap
self.run()
File "/usr/lib/python3.5/multiprocessing/process.py", line 93, in run
self._target(*self._args, **self._kwargs)
File "temp.py", line 12, in temp1
raise Exception('I have raised an exception')
Exception: I have raised an exception
Я также пытался перезаписать метод run класса Process, как упомянуто в https://stackoverflow.com/a/33599967/9971556 Не очень полезно.
Ожидаемый вывод:
In exception
I have raised an exception