Adds psutil support for max_rss on other platforms

This commit is contained in:
Ilan Steemers
2020-07-05 18:18:43 +02:00
parent b16878f36f
commit c94f2cb816
5 changed files with 31 additions and 22 deletions
+1 -12
View File
@@ -3,15 +3,4 @@ VERSION = (1, 3, 1)
default_app_config = "django_q.apps.DjangoQConfig"
__all__ = ["conf", "cluster", "models", "tasks", "croniter"]
# Optional Imports
try:
from croniter import croniter
except ImportError:
croniter = None
try:
import resource
except ModuleNotFoundError:
resource = None
__all__ = ["conf", "cluster", "models", "tasks"]
+1 -2
View File
@@ -2,10 +2,9 @@
from django.contrib import admin
from django.utils.translation import gettext_lazy as _
from django_q.conf import Conf
from django_q.conf import Conf, croniter
from django_q.models import Success, Failure, Schedule, OrmQ
from django_q.tasks import async_task
from django_q import croniter
class TaskAdmin(admin.ModelAdmin):
+18 -7
View File
@@ -20,14 +20,21 @@ from django.utils.translation import gettext_lazy as _
# Local
import django_q.tasks
from django_q.brokers import get_broker, Broker
from django_q.conf import Conf, logger, psutil, get_ppid, error_reporter
from django_q.conf import (
Conf,
logger,
psutil,
get_ppid,
error_reporter,
croniter,
resource,
)
from django_q.humanhash import humanize
from django_q.models import Task, Success, Schedule
from django_q.queues import Queue
from django_q.signals import pre_execute
from django_q.signing import SignedPackage, BadSignature
from django_q.status import Stat, Status
from django_q import croniter, resource
class Cluster:
@@ -434,11 +441,7 @@ def worker(
result_queue.put(task)
timer.value = -1 # Idle
# Recycle
if task_count == Conf.RECYCLE or (
resource
and Conf.MAX_RSS
and resource.getrusage(resource.RUSAGE_SELF).ru_maxrss >= Conf.MAX_RSS
):
if task_count == Conf.RECYCLE or rss_check():
timer.value = -2 # Recycled
break
logger.info(_(f"{name} stopped doing work"))
@@ -697,3 +700,11 @@ def set_cpu_affinity(n: int, process_ids: list, actual: bool = not Conf.TESTING)
if actual:
p.cpu_affinity(affinity)
logger.info(_(f"{pid} will use cpu {affinity}"))
def rss_check():
if Conf.MAX_RSS and resource:
return resource.getrusage(resource.RUSAGE_SELF).ru_maxrss >= Conf.MAX_RSS
elif Conf.MAX_RSS and psutil:
return psutil.Process().memory_info().rss >= Conf.MAX_RSS * 1024
return False
+10
View File
@@ -16,6 +16,16 @@ try:
except ImportError:
psutil = None
try:
from croniter import croniter
except ImportError:
croniter = None
try:
import resource
except ModuleNotFoundError:
resource = None
class Conf:
"""
+1 -1
View File
@@ -13,8 +13,8 @@ from picklefield import PickledObjectField
from picklefield.fields import dbsafe_decode
# Local
from django_q.conf import croniter
from django_q.signing import SignedPackage
from django_q import croniter
class Task(models.Model):