# -*- coding: utf-8 -*- import multiprocessing from django.conf import settings try: cpu_count = multiprocessing.cpu_count() except Exception: cpu_count = 1 class AppSettings(object): """ """ @property def MAX_ATTEMPTS(self): """Control how many times a task will be attempted.""" return getattr(settings, 'MAX_ATTEMPTS', 25) @property def BACKGROUND_TASK_MAX_ATTEMPTS(self): """Control how many times a task will be attempted.""" return self.MAX_ATTEMPTS @property def MAX_RUN_TIME(self): """Maximum possible task run time, after which tasks will be unlocked and tried again.""" return getattr(settings, 'MAX_RUN_TIME', 3600) @property def BACKGROUND_TASK_MAX_RUN_TIME(self): """Maximum possible task run time, after which tasks will be unlocked and tried again.""" return self.MAX_RUN_TIME @property def BACKGROUND_TASK_RUN_ASYNC(self): """Control if tasks will run asynchronous in a ThreadPool.""" return getattr(settings, 'BACKGROUND_TASK_RUN_ASYNC', False) @property def BACKGROUND_TASK_ASYNC_THREADS(self): """Specify number of concurrent threads.""" return getattr(settings, 'BACKGROUND_TASK_ASYNC_THREADS', cpu_count) @property def BACKGROUND_TASK_PRIORITY_ORDERING(self): """ Control the ordering of tasks in the queue. Choose either `DESC` or `ASC`. https://en.m.wikipedia.org/wiki/Nice_(Unix) A niceness of −20 is the highest priority and 19 is the lowest priority. The default niceness for processes is inherited from its parent process and is usually 0. """ order = getattr(settings, 'BACKGROUND_TASK_PRIORITY_ORDERING', 'DESC') if order == 'ASC': prefix = '' else: prefix = '-' return prefix app_settings = AppSettings() # noqa