From fbd9858f3cb4d30392ad712ab4b83b0525882b17 Mon Sep 17 00:00:00 2001 From: Harm Berntsen Date: Wed, 1 May 2024 09:17:19 +0200 Subject: [PATCH 1/2] Fix fetch_many method type (#2082) The type introduced in #1772 does not match the method description and behaviour. None is part of the returned list. --- rq/job.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rq/job.py b/rq/job.py index cf95c8ac..c09f0f4c 100644 --- a/rq/job.py +++ b/rq/job.py @@ -601,7 +601,7 @@ class Job: return job @classmethod - def fetch_many(cls, job_ids: Iterable[str], connection: 'Redis', serializer=None) -> List['Job']: + def fetch_many(cls, job_ids: Iterable[str], connection: 'Redis', serializer=None) -> List[Optional['Job']]: """ Bulk version of Job.fetch @@ -614,7 +614,7 @@ class Job: serializer (Callable): A serializer Returns: - jobs (list[Job]): A list of Jobs instances. + jobs (list[Optional[Job]]): A list of Jobs instances, elements are None if a job_id does not exist. """ parsed_ids = [parse_job_id(job_id) for job_id in job_ids] with connection.pipeline() as pipeline: From 0b31edc6dafd448bdab1a8aa815c0112e95ef4c4 Mon Sep 17 00:00:00 2001 From: Jack Kinsella Date: Wed, 1 May 2024 09:18:02 +0200 Subject: [PATCH 2/2] Document suspend and resume commands (#2068) * Document suspend and resume commands * Title case title * Modify docs --- docs/docs/index.md | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/docs/docs/index.md b/docs/docs/index.md index 7413d000..ab717c52 100644 --- a/docs/docs/index.md +++ b/docs/docs/index.md @@ -471,6 +471,31 @@ To learn about workers, see the [workers][w] documentation. [w]: {{site.baseurl}}workers/ +## Suspending and Resuming + +Sometimes you may want to suspend RQ to prevent it from processing new jobs. +A classic example is during the initial phase of a deployment script or in advance +of putting your site into maintenance mode. This is particularly helpful when +you have jobs that are relatively long-running and might otherwise be forcibly +killed during the deploy. + +The `suspend` command stops workers on _all_ queues (in a single Redis database) +from picking up new jobs. However currently running jobs will continue until +completion. + +```bash +# Suspend indefinitely +rq suspend + +# Suspend for a specific duration (in seconds) then automatically +# resume work again. +rq suspend --duration 300 + +# Resume work again. +rq resume +``` + + ## Considerations for jobs Technically, you can put any Python function call on a queue, but that does not