Advertisement
GoodiesHQ

ThreadedFuture

Nov 16th, 2016
255
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.31 KB | None | 0 0
  1. import threading
  2. from enum import Enum
  3.  
  4. class Threaded:
  5.     class Status(Enum):
  6.         uninitialized = 0
  7.         running = 1
  8.         complete = 2
  9.  
  10.     class Future:
  11.         def __init__(self, func, daemon, *args, **kwargs):
  12.             self._func, self._daemon, self._args, self._kwargs = func, daemon, args, kwargs
  13.             self._status = Threaded.Status.uninitialized
  14.             self._value = None
  15.             self._thread = None
  16.  
  17.         def run(self):
  18.             def inner(*a, **kw):
  19.                 self._status = Threaded.Status.running
  20.                 self._value = self._func(*a, **kw)
  21.                 self._status = Threaded.Status.complete
  22.             self._thread = threading.Thread(target=inner, args=self._args, kwargs=self._kwargs, daemon=self._daemon)
  23.             self._thread.start()
  24.             return self
  25.  
  26.         @property
  27.         def status(self):
  28.             return self._status
  29.  
  30.         def get(self):
  31.             if not self._daemon:
  32.                 self._thread.join()
  33.             return self._value
  34.  
  35.     def __init__(self, daemon=False):
  36.         self._daemon = daemon
  37.  
  38.     def __call__(self, func):
  39.         def run(*args, **kwargs):
  40.             fut = self.Future(func, self._daemon, *args, **kwargs)
  41.             fut.run()
  42.             return fut
  43.         return run
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement