From cc178df2b168f6367bd8efcbf1830939e2fc61e5 Mon Sep 17 00:00:00 2001 From: Ilan Steemers Date: Wed, 9 Sep 2015 13:25:27 +0200 Subject: [PATCH] #56 fakes setting cpu_affinity on unsupported platforms --- django_q/cluster.py | 7 ++++++- django_q/tests/settings.py | 1 - docs/configure.rst | 2 ++ docs/examples.rst | 2 +- 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/django_q/cluster.py b/django_q/cluster.py index d3b5663..13142a6 100644 --- a/django_q/cluster.py +++ b/django_q/cluster.py @@ -431,7 +431,7 @@ def scheduler(broker=None): # get args, kwargs and hook if s.kwargs: try: - # eval should be safe here cause dict() + # eval should be safe here because dict() kwargs = eval('dict({})'.format(s.kwargs)) except SyntaxError: kwargs = {} @@ -499,7 +499,12 @@ def set_cpu_affinity(n, process_ids, actual=not Conf.TESTING): """ # check if we have the psutil module if not psutil: + logger.warning('Skipping cpu affinity because psutil was not found.') return + # check if the platform supports cpu_affinity + if actual and not hasattr(psutil.Process(process_ids[0]), 'cpu_affinity'): + logger.warning('Faking cpu affinity because it is not supported on this platform') + actual = False # get the available processors cpu_list = list(range(psutil.cpu_count())) # affinities of 0 or gte cpu_count, equals to no affinity diff --git a/django_q/tests/settings.py b/django_q/tests/settings.py index 8bad66c..027e906 100644 --- a/django_q/tests/settings.py +++ b/django_q/tests/settings.py @@ -117,6 +117,5 @@ CACHES = { # Django Q specific Q_CLUSTER = {'name': 'django_q_test', 'cpu_affinity': 1, - 'testing': True, 'log_level': 'DEBUG', 'django_redis': 'default'} diff --git a/docs/configure.rst b/docs/configure.rst index 4d2b6e9..d50aa66 100644 --- a/docs/configure.rst +++ b/docs/configure.rst @@ -269,6 +269,8 @@ As a rule of thumb; cpu_affinity 1 favors repetitive short running tasks, while The ``cpu_affinity`` setting requires the optional :ref:`psutil ` module. + *Psutil does not support cpu affinity on OS X at this time.* + .. py:module:: django_q .. rubric:: Footnotes diff --git a/docs/examples.rst b/docs/examples.rst index b53929c..4b9038d 100644 --- a/docs/examples.rst +++ b/docs/examples.rst @@ -137,7 +137,7 @@ In this example the user requests a report and we let the cluster do the generat task.result) -The hook is practical here, cause it allows us to detach the sending task from the report generation function and to report on possible failures. +The hook is practical here, because it allows us to detach the sending task from the report generation function and to report on possible failures. Haystack ========