Add task diff support

This commit is contained in:
allegroai
2019-07-09 00:04:26 +03:00
parent 566b28dc4c
commit a33c94e24f
3 changed files with 69 additions and 0 deletions

View File

@@ -0,0 +1,29 @@
from functools import wraps
from threading import Lock, Thread
import attr
@attr.s(auto_attribs=True)
class ThreadsManager:
objects = {}
lock = Lock()
def register(self, thread_name, daemon=True):
def decorator(f):
@wraps(f)
def wrapper(*args, **kwargs):
with self.lock:
thread = self.objects.get(thread_name)
if not thread:
thread = Thread(
target=f, name=thread_name, args=args, kwargs=kwargs
)
thread.daemon = daemon
thread.start()
self.objects[thread_name] = thread
return thread.ident
return wrapper
return decorator