0

I am creating a process to execute a function. If the function raises an exception I am not able to catch it. The following is a sample code.

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()

When I run the above code the exception raised within temp1 does not get caught. Below is the sample output

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

I have also tried overwriting the run method of the Process class as mentioned in https://stackoverflow.com/a/33599967/9971556 Wasn't very helpful.

Expected output:

In exception
I have raised an exception

0 Answers0