Server IP : 128.199.20.84 / Your IP : 172.70.100.138 Web Server : Apache/2.4.41 (Ubuntu) System : Linux competent-maruti 5.4.0-128-generic #144-Ubuntu SMP Tue Sep 20 11:00:04 UTC 2022 x86_64 User : www-data ( 33) PHP Version : 8.0.20 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF Directory (0755) : /usr/lib/python2.7/../python3/dist-packages/apport/ |
[ Home ] | [ C0mmand ] | [ Upload File ] |
---|
'''Enhanced Thread with support for return values and exception propagation.''' # Copyright (C) 2007 Canonical Ltd. # Author: Martin Pitt <[email protected]> # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation; either version 2 of the License, or (at your # option) any later version. See http://www.gnu.org/copyleft/gpl.html for # the full text of the license. import threading, sys class REThread(threading.Thread): '''Thread with return values and exception propagation.''' def __init__(self, group=None, target=None, name=None, args=(), kwargs={}): '''Initialize Thread, identical to threading.Thread.__init__().''' threading.Thread.__init__(self, group, target, name, args, kwargs) self.__target = target self.__args = args self.__kwargs = kwargs self._retval = None self._exception = None def run(self): '''Run target function, identical to threading.Thread.run().''' if self.__target: try: self._retval = self.__target(*self.__args, **self.__kwargs) except: if sys: self._exception = sys.exc_info() def return_value(self): '''Return value from target function. This can only be called after the thread has finished, i. e. when is_alive() is False and did not terminate with an exception. ''' assert not self.is_alive() assert not self._exception return self._retval def exc_info(self): '''Return (type, value, traceback) of the exception caught in run().''' return self._exception def exc_raise(self): '''Raise the exception caught in the thread. Do nothing if no exception was caught. ''' if self._exception: # there is no syntax which both Python 2 and 3 parse, so we need a # hack using exec() here # Python 3: if sys.version > '3': raise self._exception[1].with_traceback(self._exception[2]) else: exec('raise self._exception[0], self._exception[1], self._exception[2]')