mirror of
https://github.com/django-q2/django-q2.git
synced 2026-10-07 04:58:11 +08:00
Adds psutil support for max_rss on other platforms
This commit is contained in:
+1
-12
@@ -3,15 +3,4 @@ VERSION = (1, 3, 1)
|
|||||||
default_app_config = "django_q.apps.DjangoQConfig"
|
default_app_config = "django_q.apps.DjangoQConfig"
|
||||||
|
|
||||||
|
|
||||||
__all__ = ["conf", "cluster", "models", "tasks", "croniter"]
|
__all__ = ["conf", "cluster", "models", "tasks"]
|
||||||
|
|
||||||
# Optional Imports
|
|
||||||
try:
|
|
||||||
from croniter import croniter
|
|
||||||
except ImportError:
|
|
||||||
croniter = None
|
|
||||||
|
|
||||||
try:
|
|
||||||
import resource
|
|
||||||
except ModuleNotFoundError:
|
|
||||||
resource = None
|
|
||||||
|
|||||||
+1
-2
@@ -2,10 +2,9 @@
|
|||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
from django.utils.translation import gettext_lazy as _
|
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.models import Success, Failure, Schedule, OrmQ
|
||||||
from django_q.tasks import async_task
|
from django_q.tasks import async_task
|
||||||
from django_q import croniter
|
|
||||||
|
|
||||||
|
|
||||||
class TaskAdmin(admin.ModelAdmin):
|
class TaskAdmin(admin.ModelAdmin):
|
||||||
|
|||||||
+18
-7
@@ -20,14 +20,21 @@ from django.utils.translation import gettext_lazy as _
|
|||||||
# Local
|
# Local
|
||||||
import django_q.tasks
|
import django_q.tasks
|
||||||
from django_q.brokers import get_broker, Broker
|
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.humanhash import humanize
|
||||||
from django_q.models import Task, Success, Schedule
|
from django_q.models import Task, Success, Schedule
|
||||||
from django_q.queues import Queue
|
from django_q.queues import Queue
|
||||||
from django_q.signals import pre_execute
|
from django_q.signals import pre_execute
|
||||||
from django_q.signing import SignedPackage, BadSignature
|
from django_q.signing import SignedPackage, BadSignature
|
||||||
from django_q.status import Stat, Status
|
from django_q.status import Stat, Status
|
||||||
from django_q import croniter, resource
|
|
||||||
|
|
||||||
|
|
||||||
class Cluster:
|
class Cluster:
|
||||||
@@ -434,11 +441,7 @@ def worker(
|
|||||||
result_queue.put(task)
|
result_queue.put(task)
|
||||||
timer.value = -1 # Idle
|
timer.value = -1 # Idle
|
||||||
# Recycle
|
# Recycle
|
||||||
if task_count == Conf.RECYCLE or (
|
if task_count == Conf.RECYCLE or rss_check():
|
||||||
resource
|
|
||||||
and Conf.MAX_RSS
|
|
||||||
and resource.getrusage(resource.RUSAGE_SELF).ru_maxrss >= Conf.MAX_RSS
|
|
||||||
):
|
|
||||||
timer.value = -2 # Recycled
|
timer.value = -2 # Recycled
|
||||||
break
|
break
|
||||||
logger.info(_(f"{name} stopped doing work"))
|
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:
|
if actual:
|
||||||
p.cpu_affinity(affinity)
|
p.cpu_affinity(affinity)
|
||||||
logger.info(_(f"{pid} will use cpu {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
|
||||||
|
|||||||
@@ -16,6 +16,16 @@ try:
|
|||||||
except ImportError:
|
except ImportError:
|
||||||
psutil = None
|
psutil = None
|
||||||
|
|
||||||
|
try:
|
||||||
|
from croniter import croniter
|
||||||
|
except ImportError:
|
||||||
|
croniter = None
|
||||||
|
|
||||||
|
try:
|
||||||
|
import resource
|
||||||
|
except ModuleNotFoundError:
|
||||||
|
resource = None
|
||||||
|
|
||||||
|
|
||||||
class Conf:
|
class Conf:
|
||||||
"""
|
"""
|
||||||
|
|||||||
+1
-1
@@ -13,8 +13,8 @@ from picklefield import PickledObjectField
|
|||||||
from picklefield.fields import dbsafe_decode
|
from picklefield.fields import dbsafe_decode
|
||||||
|
|
||||||
# Local
|
# Local
|
||||||
|
from django_q.conf import croniter
|
||||||
from django_q.signing import SignedPackage
|
from django_q.signing import SignedPackage
|
||||||
from django_q import croniter
|
|
||||||
|
|
||||||
|
|
||||||
class Task(models.Model):
|
class Task(models.Model):
|
||||||
|
|||||||
Reference in New Issue
Block a user