Checks if cpu_count is implemented

On rare occasions, usually on win32, cpu_count will raise a NotImplemented error.  If psutil is installed we will use this to get the correct count, otherwise we default to 4
This commit is contained in:
Ilan
2015-08-04 16:28:19 +02:00
parent 25dcec4572
commit ae8745ab39
2 changed files with 23 additions and 9 deletions

View File

@@ -22,12 +22,6 @@ from multiprocessing import Queue, Event, Process, Value, current_process
# external
import arrow
# optional
try:
import psutil
except ImportError:
psutil = None
# Django
from django.utils import timezone
from django.utils.translation import ugettext_lazy as _
@@ -37,7 +31,7 @@ from django import db
import signing
import tasks
from django_q.conf import Conf, redis_client, logger
from django_q.conf import Conf, redis_client, logger, psutil
from django_q.models import Task, Success, Schedule
from django_q.monitor import Status, Stat

View File

@@ -2,10 +2,19 @@ import logging
from signal import signal
from multiprocessing import cpu_count, Queue
# django
from django.utils.translation import ugettext_lazy as _
from django.conf import settings
# external
import redis
# optional
try:
import psutil
except ImportError:
psutil = None
class Conf(object):
"""
@@ -36,8 +45,19 @@ class Conf(object):
# Maximum number of tasks that each cluster can work on
QUEUE_LIMIT = conf.get('queue_limit', None)
# Number of workers in the pool. Default is cpu count. +2 for monitor and pusher
WORKERS = conf.get('workers', cpu_count())
# Number of workers in the pool. Default is cpu count if implemented, otherwise 4.
WORKERS = conf.get('workers', False)
if not WORKERS:
try:
WORKERS = cpu_count()
# in rare cases this might fail
except NotImplementedError:
# try psutil
if psutil:
WORKERS = psutil.cpu_count() or 4
else:
# sensible default
WORKERS = 4
# Sets compression of redis packages
COMPRESSED = conf.get('compress', False)