Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import threading
- from enum import Enum
- class Threaded:
- class Status(Enum):
- uninitialized = 0
- running = 1
- complete = 2
- class Future:
- def __init__(self, func, daemon, *args, **kwargs):
- self._func, self._daemon, self._args, self._kwargs = func, daemon, args, kwargs
- self._status = Threaded.Status.uninitialized
- self._value = None
- self._thread = None
- def run(self):
- def inner(*a, **kw):
- self._status = Threaded.Status.running
- self._value = self._func(*a, **kw)
- self._status = Threaded.Status.complete
- self._thread = threading.Thread(target=inner, args=self._args, kwargs=self._kwargs, daemon=self._daemon)
- self._thread.start()
- return self
- @property
- def status(self):
- return self._status
- def get(self):
- if not self._daemon:
- self._thread.join()
- return self._value
- def __init__(self, daemon=False):
- self._daemon = daemon
- def __call__(self, func):
- def run(*args, **kwargs):
- fut = self.Future(func, self._daemon, *args, **kwargs)
- fut.run()
- return fut
- return run
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement