Commit Graph

18 Commits

Author SHA1 Message Date
Ethan Wolinsky 3a3787dcc3
Group jobs into batches and retrieve by batch name (#1945)
* Batch.py initial commit

* Add method to refresh batch status

* Clean up Redis key properties

* Remove persist_job method

* Execute refresh method when fetching batch

* Add batch_id to job

* Add option to batch jobs with enqueue_many

* Add set_batch_id method

* Handle batch_ttl when job is started

* Renew ttl on all jobs in batch when a job finishes

* Use fetch_jobs method in refresh()

* Remove batch TTL

During worker maintenance task, worker will loop through batches and
delete expired jobs.
When all jobs are expired, the batch is deleted.

* Fix buggy connection

* Raise batch error in fetch method

* Fix fetch connection arg

* Add testing for batch

* Remove unused import

* Update batch documentation

* Add batch ID to job persistence test

* Test that empty batch is removed from batch list

* Make default batch ID full uuid4 to match Job

* Add method to return batch key

* Add all method to return iterable of batches

* Revert changes to queue.py

* Separate batch creating from job enqueueing.

Batches can be created by passing an array of jobs.

* Fix bug with stopped callback in enqueue_many

* Rename delete_expired_jobs batch method

* Use exists to identify expired jobs

* Remove jobs attribute from batch

Jobs have to be explicitly fetched using the get_jobs method

* Don't add batch_id to job in _add_jobs method

This should be done when the job is created before it is saved to redis.

* Use cleanup method to determine if batch should be deleted

* Add get_jobs method

This method will return an array of jobs belonging to the batch.

* Update create method to not allow jobs arg

Jobs should be added to batches in the Queue.enqueue_many
function

* Add batch_id to job create method

* Delete set_batch_id method

The batch ID should be set atomically when the job is created

* Add batch argument to queue.enqueue_many

This will be how jobs can be batched. The batch ID is added to each job
created by enqueue_many, and then those jobs are all added to the batch
in Redis using the batch's _add_jobs method

* Update batch tests to use new enqueue_many arg

* Fix batch_id for non_batched jobs

* Use different pipeline name

* Don't use fetch method when enqueuing jobs

If the batch is empty, fetch will delete it from Redis

* Test enqueuing batched jobs with string ID

* Update batch documentation

* Remove unused variables

* Fix expired job tracking bug

* Add delete_job method

* Use delete_job method on batch

* Pass multiple jobs into srem command

* Add multiple keys to exists call

* Pipeline _add_jobs call

* Fix missing job_id arg

* Move clean_batch_registry to Batch class

* Remove unused variables

* Fix missing dependency deletion

I accidentally deleted this earlier

* Move batch enqueueing to batch class

* Update batch docs

* Add test for batched jobs with str queue arg

* Don't delete batch in cleanup

* Change Batch to Group

* Import EnqueueData for type hint

* Sort imports

* Remove local config file

* Rename clean_group_registries method

* Update feature version

* Fix group constant names

* Only allow Queue in enqueue many

* Move cleanup logic to classmethod

* Remove str group test

* Remove unused import

* Make pipeline mandatory in _add_jobs method

* Rename expired job ids array

* Add slow decorator

* Assert job 1 data in group

* Rename id arg to name

* Only run cleanup when jobs are retrieved

* Remove job_ids variable

* Fix group name arg

* Fix group name arg

* Clean groups before fetching

* Use uuid4().hex for shorter id

* Move cleanup logic to instance method

* Use all method when cleaning group registry

* Check if group exists instead of catching error

* Cleanup expired jobs

* Apply black formatting

* Fix black formatting

* Pipeline group cleanup

* Fix pipeline call to exists

* Add pyenv version file

* Remove group cleanup after job completes

* Use existing pipeline

* Remove unneeded pipeline check

* Fix empty call

* Test group __repr__ method

* Remove unnecessary pipeline assignment

* Remove unused delete method

* Fix pipeline name

* Remove unnecessary conditional block
2024-03-11 15:08:53 +07:00
lowercase00 375ace1747
Typing (#1698)
* Gitignore Venv + VScode

* Add Typings, Add Test to Makefile

* Fix, More typing, Redis Pipeline specific type

* More types

* Fix 3.7- Typing Compat, Add Tox Envs, Tests Dockerfile

* fix listindex error (#1700)

* More docstrings

* More Types

* Fix Typo on Dependency

* Last Types

Co-authored-by: Burak Yılmaz <46003469+yilmaz-burak@users.noreply.github.com>
2022-10-01 16:34:30 +07:00
Selwin Ong c4cbb3af2f
RQ v1.0! (#1059)
* Added FailedJobRegistry.

* Added job.failure_ttl.

* queue.enqueue() now supports failure_ttl

* Added registry.get_queue().

* FailedJobRegistry.add() now assigns DEFAULT_FAILURE_TTL.

* StartedJobRegistry.cleanup() now moves expired jobs to FailedJobRegistry.

* Failed jobs are now added to FailedJobRegistry.

* Added FailedJobRegistry.requeue()

* Document the new `FailedJobRegistry` and changes in custom exception handler behavior.

* Added worker.disable_default_exception_handler.

* Document --disable-default-exception-handler option.

* Deleted worker.failed_queue.

* Deleted "move_to_failed_queue" exception handler.

* StartedJobRegistry should no longer move jobs to FailedQueue.

* Deleted requeue_job

* Fixed test error.

* Make requeue cli command work with FailedJobRegistry

* Added .pytest_cache to gitignore.

* Custom exception handlers are no longer run in reverse

* Restored requeue_job function

* Removed get_failed_queue

* Deleted FailedQueue

* Updated changelog.

* Document `failure_ttl`

* Updated docs.

* Remove job.status

* Fixed typo in test_registry.py

* Replaced _pipeline() with pipeline()

* FailedJobRegistry no longer fails on redis-py>=3

* Fixes test_clean_registries

* Worker names are now randomized

* Added a note about random worker names in CHANGES.md

* Worker will now stop working when encountering an unhandled exception.

* Worker should reraise SystemExit on cold shutdowns

* Added anchor.js to docs

* Support for Sentry-SDK (#1045)

* Updated RQ to support sentry-sdk

* Document Sentry integration

* Install sentry-sdk before running tests

* Improved rq info CLI command to be more efficient when displaying lar… (#1046)

* Improved rq info CLI command to be more efficient when displaying large number of workers

* Fixed an rq info --by-queue bug

* Fixed worker.total_working_time bug (#1047)

* queue.enqueue() no longer accepts `timeout` argument (#1055)

* Clean worker registry (#1056)

* queue.enqueue() no longer accepts `timeout` argument

* Added clean_worker_registry()

* Show worker hostname and PID on cli (#1058)

* Show worker hostname and PID on cli

* Improve test coverage

* Remove Redis version check when SSL is used

* Bump version to 1.0

* Removed pytest_cache/README.md

* Changed worker logging to use exc_info=True

* Removed unused queue.dequeue()

* Fixed typo in CHANGES.md

* setup_loghandlers() should always call logger.setLevel() if specified
2019-03-30 09:13:56 +07:00
Selwin Ong 147efc54dd Added anchor.js to docs 2019-02-05 18:06:43 +07:00
Selwin Ong 4759c43067 horse should always call os._exit(0) 2018-09-23 20:40:09 +07:00
Selwin Ong 936f2f19f6 Fixed broken image link in docs. 2018-03-03 07:29:17 +07:00
Jannis Leidel c019662430
Allow passing backend classes (job, queue, worker, connection) from CLI and other APIs
This includes:

- a partial refactor of the CLI to organize the shared options
- extends the tests in areas where passing custom backend classes makes sense
- allow setting the core CLI options as env vars
- minor cosmetic changes here and there
2017-01-25 09:43:36 +01:00
Vincent Driessen a689cdb3ec Ignore more files 2016-11-18 08:42:43 +01:00
ahxxm 95e06818d9 ignore IDE cache folder 2015-11-09 12:38:27 +08:00
Jonathan Tushman 82333d2ad5 triggering shutdown by setting a redis flag 2014-12-12 16:58:41 -05:00
Travis Johnson 629b392924 add PyCharm .idea folder to .gitignore 2014-11-17 15:04:58 -05:00
foxx 0466562a13 Fixes from comments in #415
Added tox/vagrant tmp dir to gitignore
Removed unused import
Renamed id to job_id in enqueue_call() as per comments in #415
2014-09-09 11:10:18 +01:00
Vincent Driessen 9d78f145a3 Add wheel support to RQ. 2014-01-03 08:11:01 +01:00
Vincent Driessen 7ff3d5c5cd Ignore .envrc files. 2014-01-03 08:11:00 +01:00
Vincent Driessen d418fbe9a8 Remove accidentally committed file. 2013-08-20 11:16:37 +02:00
Vincent Driessen 73e6017896 Add tox tests, for Python 2.6 and PyPy. 2013-01-23 22:57:44 +01:00
Vincent Driessen f62e295454 Ignore autoenv file. 2012-02-15 13:15:57 +01:00
Vincent Driessen c45e056786 Add some project meta stuff. 2011-11-14 12:11:58 +01:00