From ef4b7c46a6eae1ee00d0b22e03450548a9f0edb5 Mon Sep 17 00:00:00 2001 From: Zina Rasoamanana Date: Thu, 16 Oct 2025 07:50:07 +0200 Subject: [PATCH] [WIP] queue_job: improve memory usage --- queue_job/job.py | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/queue_job/job.py b/queue_job/job.py index d8e50e5124..02bc11b1ed 100644 --- a/queue_job/job.py +++ b/queue_job/job.py @@ -7,7 +7,6 @@ import os import sys import uuid -import weakref from datetime import datetime, timedelta from functools import total_ordering from random import randint @@ -438,6 +437,12 @@ def db_records_from_uuids(env, job_uuids): record = model.search([("uuid", "in", tuple(job_uuids))]) return record.with_env(env).sudo() + @staticmethod + def db_check_uuids_in_db(env, job_uuids): + model = env["queue.job"].sudo() + record_uuids = model.search_read([("uuid", "in", tuple(job_uuids))], ["uuid"]) + return record_uuids + def __init__( self, func, @@ -518,7 +523,6 @@ def __init__( self.__depends_on_uuids = set() self.__reverse_depends_on_uuids = set() self._depends_on = set() - self._reverse_depends_on = weakref.WeakSet() self.priority = priority if self.priority is None: @@ -560,10 +564,8 @@ def add_depends(self, jobs): if self in jobs: raise ValueError("job cannot depend on itself") self.__depends_on_uuids |= {j.uuid for j in jobs} - self._depends_on.update(jobs) for parent in jobs: parent.__reverse_depends_on_uuids.add(self.uuid) - parent._reverse_depends_on.add(self) if any(j.state != DONE for j in jobs): self.state = WAIT_DEPENDENCIES @@ -689,9 +691,15 @@ def _store_values(self, create=False): vals["identity_key"] = self.identity_key dependencies = { - "depends_on": [parent.uuid for parent in self.depends_on], + "depends_on": [ + rec["uuid"] + for rec in Job.db_check_uuids_in_db(self.env, self.__depends_on_uuids) + ], "reverse_depends_on": [ - children.uuid for children in self.reverse_depends_on + rec["uuid"] + for rec in Job.db_check_uuids_in_db( + self.env, self.__reverse_depends_on_uuids + ) ], } vals["dependencies"] = dependencies @@ -796,14 +804,6 @@ def depends_on(self): self._depends_on = Job.load_many(self.env, self.__depends_on_uuids) return self._depends_on - @property - def reverse_depends_on(self): - if not self._reverse_depends_on: - self._reverse_depends_on = Job.load_many( - self.env, self.__reverse_depends_on_uuids - ) - return set(self._reverse_depends_on) - @property def description(self): if self._description: