diff --git a/tubesync/common/huey.py b/tubesync/common/huey.py index 87963726..0dee931e 100644 --- a/tubesync/common/huey.py +++ b/tubesync/common/huey.py @@ -1,3 +1,4 @@ +import os from functools import wraps @@ -25,13 +26,21 @@ def h_q_tuple(q, /): ) -def sqlite_tasks(key, /, prefix=None): +def sqlite_tasks(key, /, prefix=None, thread=None, workers=None): name_fmt = 'huey_{}' - if prefix is None: - prefix = '' if prefix: name_fmt = f'huey_{prefix}_' + '{}' name = name_fmt.format(key) + thread = thread is True + try: + workers = int(workers) + except TypeError: + workers = 2 + finally: + if 0 >= workers: + workers = os.cpu_count() + elif 1 == workers: + thread = False return dict( huey_class='huey.SqliteHuey', name=name, @@ -46,8 +55,8 @@ def sqlite_tasks(key, /, prefix=None): strict_fifo=True, ), consumer=dict( - workers=1, - worker_type='process', + workers=workers if thread else 1, + worker_type='thread' if thread else 'process', max_delay=20.0, flush_locks=True, scheduler_interval=10, diff --git a/tubesync/tubesync/settings.py b/tubesync/tubesync/settings.py index f5689dd1..dfa8148f 100644 --- a/tubesync/tubesync/settings.py +++ b/tubesync/tubesync/settings.py @@ -52,10 +52,10 @@ FORCE_SCRIPT_NAME = None DJANGO_HUEY = { 'default': 'network', 'queues': { - 'database': sqlite_tasks('database'), - 'filesystem': sqlite_tasks('filesystem'), - 'limited': sqlite_tasks('limited', prefix='net'), - 'network': sqlite_tasks('network'), + 'database': sqlite_tasks('database', thread=True), + 'filesystem': sqlite_tasks('filesystem', thread=True), + 'limited': sqlite_tasks('limited', prefix='net', workers=1), + 'network': sqlite_tasks('network', thread=True, workers=0), }, } for django_huey_queue in DJANGO_HUEY['queues'].values():