From c51db5fa471cedc6b9145f3cb87cd8ffe49a8293 Mon Sep 17 00:00:00 2001 From: Martin Mares <mj@ucw.cz> Date: Sun, 20 Oct 2024 15:58:43 +0200 Subject: [PATCH] =?UTF-8?q?run-jobs:=20Probouzen=C3=AD=20=C4=8Dekaj=C3=ADc?= =?UTF-8?q?=C3=ADch=20job=C5=AF=20jen=20na=20po=C5=BE=C3=A1d=C3=A1n=C3=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Jinak v testovacím prostředí spouštíme hromady jobů naplánovaných na nějaké datum v dávné minulosti (ročník 42). --- bin/run-jobs | 5 ++++- mo/jobs/__init__.py | 19 ++++++++++--------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/bin/run-jobs b/bin/run-jobs index 2b76a58f..f0460c56 100755 --- a/bin/run-jobs +++ b/bin/run-jobs @@ -7,6 +7,7 @@ import argparse parser = argparse.ArgumentParser(description='Spustí joby ve frontě') parser.add_argument('-j', '--job', type=int, metavar='ID', help='Spustí konkrétní job') parser.add_argument('-r', '--restart', default=False, action='store_true', help='Znovu spustí dokončený job') +parser.add_argument('-w', '--wake', default=False, action='store_true', help='Probudí naplánované joby, jejichž čas přišel') args = parser.parse_args() @@ -15,9 +16,11 @@ init_standalone() if args.job is None: if args.restart: die("Přepínač --restart lze použít jen s --job") - mo.jobs.process_jobs() + mo.jobs.process_jobs(wake=args.wake) else: tj = mo.jobs.TheJob(args.job) if not tj.load(): die("Tento job neexistuje") + if args.wake: + tj.wake() tj.run(restart=args.restart) diff --git a/mo/jobs/__init__.py b/mo/jobs/__init__.py index b82ac547..95d6cdb6 100644 --- a/mo/jobs/__init__.py +++ b/mo/jobs/__init__.py @@ -240,7 +240,7 @@ class TheJob: mo.email.send_job_done_email(job) -def process_jobs(min_priority: int = 0): +def process_jobs(min_priority: int = 0, wake: bool = True): sess = db.get_session() assert hasattr(mo, 'now'), 'mo.now není nastaveno' @@ -259,14 +259,15 @@ def process_jobs(min_priority: int = 0): tj.expire() # Probereme čekající joby, jejichž čas už přišel - to_wake = (sess.query(db.Job.job_id) - .filter(db.Job.state == db.JobState.waiting) - .filter(db.Job.waiting_until < mo.now) - .all()) - sess.rollback() - for job_id, in to_wake: - tj = TheJob(job_id) - tj.wake() + if wake: + to_wake = (sess.query(db.Job.job_id) + .filter(db.Job.state == db.JobState.waiting) + .filter(db.Job.waiting_until < mo.now) + .all()) + sess.rollback() + for job_id, in to_wake: + tj = TheJob(job_id) + tj.wake() # Probereme joby, které by měly běžet ready = (sess.query(db.Job.job_id) -- GitLab