From 4cd4b37c889d5940e75f058b2645220acd993566 Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Sat, 2 Sep 2017 19:25:51 -0400 Subject: [PATCH] working! Signed-off-by: Kenneth Reitz --- background.py | 54 +++++++++++++++++++++++---------------------------- 1 file changed, 24 insertions(+), 30 deletions(-) diff --git a/background.py b/background.py index 7905650..d786da3 100644 --- a/background.py +++ b/background.py @@ -5,42 +5,36 @@ import concurrent.futures from decorator import decorator +def default_n(): + return multiprocessing.cpu_count() -class Worker(object): - """A Background Worker.""" +n = default_n() +pool = concurrent.futures.ThreadPoolExecutor(max_workers=n) +callbacks = [] +results = [] - def __init__(self, n=None, use_subprocess=False): - self.n = n - self.use_subprocess = use_subprocess +def run(f, *args, **kwargs): - self.configure_n() + pool._max_workers = n + pool._adjust_thread_count() - if self.uses_subprocess: - self.pool = concurrent.futures.ProcessPoolExecutor(max_workers=self.n) - else: - self.pool = concurrent.futures.ThreadPoolExecutor(max_workers=self.n) - - @property - def uses_threads(self): - return not self.uses_subprocess - - @property - def uses_subprocess(self): - return self.use_subprocess - - def configure_n(self): - if self.n is None: - self.n = multiprocessing.cpu_count() - - # @decorator - def run(self, f, *args, **kwargs): - self.pool.submit(f, *args, **kwargs) - - -default_worker = Worker() + f = pool.submit(f, *args, **kwargs) + results.append(f) + return f @decorator def task(f, *args, **kwargs): - return default_worker.run(f) + result = run(f, *args, **kwargs) + results.append(result) + for cb in callbacks: + result.add_done_callback(cb) + + return result + +def callback(f): + callbacks.append(f) + def register_callback(): + f() + return register_callback