def __init__(self, func, *args, **kwargs): self.func = func self.args = args self.kwargs = kwargs self.throw = kwargs.pop('throw', True) self.daemon = kwargs.pop('daemon', True) self.threadname = kwargs.pop('threadname', 'anon-%X' % id(self)) self.stopper = kwargs.pop('stopper', threading.Event()) self.sleep = kwargs.pop('sleep', 1) self.loop = kwargs.pop('loop', False) self.timer = None self.console_logging = kwargs.pop('console_logging', True) real_thread_no_greenlet = kwargs.pop('real_thread_no_greenlet', False) if is_module_patched("threading"): # in case of using apply_gevent_patch function - use this option in order to defer some jobs to real threads self.real_thread_no_greenlet = real_thread_no_greenlet else: # gevent isn't active, no need to do anything special self.real_thread_no_greenlet = False rimt = kwargs.pop("raise_in_main_thread", False) if rimt: exc_type = Exception if rimt is True else rimt self.func = raise_in_main_thread(exc_type)(self.func)
from easypy.humanize import IndentableTextBuffer, time_duration, compact from easypy.humanize import format_thread_stack, yesno_to_bool from easypy.threadtree import iter_thread_frames from easypy.timing import Timer from easypy.units import MINUTE, HOUR from easypy.colors import colorize, uncolored from easypy.sync import SynchronizationCoordinator, ProcessExiting, raise_in_main_thread MAX_THREAD_POOL_SIZE = int(os.environ.get('EASYPY_MAX_THREAD_POOL_SIZE', 50)) DISABLE_CONCURRENCY = yesno_to_bool( os.getenv("EASYPY_DISABLE_CONCURRENCY", "no")) this_module = import_module(__name__) THREADING_MODULE_PATHS = [threading.__file__] if is_module_patched("threading"): import gevent MAX_THREAD_POOL_SIZE *= 100 # these are not threads anymore, but greenlets. so we allow a lot of them THREADING_MODULE_PATHS.append(gevent.__path__[0]) try: from traceback import _extract_stack_iter except ImportError: from traceback import walk_stack def _extract_stack_iter(frame): for f, lineno in walk_stack(frame): co = f.f_code filename = co.co_filename name = co.co_name yield filename, lineno, name