Selwin Ong
c987569650
Safe fetching a deleted job removes the deleted job from queue.
12 years ago
Vincent Driessen
501a3870e1
Ignore a job when there isn't a "data" key available.
12 years ago
Vincent Driessen
223e09f4fe
Add rq.contrib.legacy.cleanup_ghosts() function, to clean up old mess.
12 years ago
Vincent Driessen
d39badb4cc
Prevent the use of indefinite timeouts.
...
Using them would really mess with the new expiring worker keys (they
would disappear, even though the workers aren't dead).
12 years ago
Vincent Driessen
e0866cdc6c
Log the act of sending a heartbeat (DEBUG level).
12 years ago
Vincent Driessen
e4d37332f0
Fix typos.
12 years ago
Vincent Driessen
e8c1885eda
Avoid negative timeouts when default_worker_ttl is < 60.
12 years ago
Vincent Driessen
640195d5e4
Merge branch 'master' into yaniv-aknin-worker_ttl
12 years ago
Vincent Driessen
a7f927f845
Fix non-relative import.
12 years ago
Vincent Driessen
192770773a
Remove unused import.
12 years ago
Vincent Driessen
c0a594d47a
Merge pull request #177 from selwin/master
...
FailedQueue.requeue should set job status back to Queued
12 years ago
Selwin Ong
e5fa82aa5d
Merge branch 'master' of github.com:selwin/rq
12 years ago
Selwin Ong
05d744c9af
Requeuing a job should set its status back to Queued.
12 years ago
Vincent Driessen
4688498e2d
Attach job ID when unpickling fails in .dequeue().
...
This makes the behaviour consistent with .dequeue_any().
12 years ago
Vincent Driessen
83525c42c7
Prevent against 'created_at' field being None.
12 years ago
Vincent Driessen
7d37c257ae
Prepare for 0.3.6.
12 years ago
Vincent Driessen
c427eda36c
Bump version to 0.3.5.
12 years ago
Vincent Driessen
54254f2271
Patch the connection instances.
...
This patches the connection object (which is either a StrictRedis
instance or a Redis instance), to have alternative class methods that
behave exactly like their StrictRedis counterparts, no matter whether
which type the object is. Only the ambiguous methods are patched. The
exhaustive list:
- _zadd (fixes argument order)
- _lrem (fixes argument order)
- _setex (fixes argument order)
- _pipeline (always returns a StrictPipeline)
- _ttl (fixes return value)
- _pttl (fixes return value)
This makes it possible to call the methods reliably without polluting
the RQ code any further.
12 years ago
Vincent Driessen
67880343f1
Make inner_exception optional, and use new except syntax.
12 years ago
Idan Kamara
2baa2e370f
job: save the real exception when unpickling fails
...
We raise our own exception which hides the real error (often an ImportError),
making it difficult to see what happend. Instead, save the original exception
too.
12 years ago
Yaniv Aknin
4925b09aa5
Set worker ttl and maintain it when idle/taking/finishing jobs
...
This change could use far better test coverage, but I'm not sure how to
test it without refactoring more of the code than I think is reasonable
in the scope of this work.
12 years ago
Yaniv Aknin
74c2351232
Refactor dequeue_any to accept arbitrary timeouts
...
The 'blocking' parameter was replaced with a 'timeout' parameter.
The timeout parameter is interpreted thus:
0 - no timeout (block forever, equivalent to blocking=True)
None - non-blocking (return value or None immediately, equivalent to
blocking=False)
<integer> - maximum seconds to block
Upon timing out, a dequeue operation will raise DequeueTimeout.
12 years ago
Vincent Driessen
743cf3cd74
Merge branch 'vierja-ended_time'
12 years ago
Vincent Driessen
20d435a077
Prepare for 0.3.5.
12 years ago
Vincent Driessen
f818fb5d43
Bump version to 0.3.4.
12 years ago
Vincent Driessen
e1b81b1669
Avoid new-style classes under Python 2.6.
...
Little ugly fix, required because Python 2.6's logging uses old-style
classes. Thanks for finding this one, @deferraz.
12 years ago
Vincent Driessen
77fb32791d
Include a copy of dictConfig in RQ, for Python 2.6 compat.
12 years ago
Vincent Driessen
e29981a008
Bump to new development version.
12 years ago
Vincent Driessen
55bb32cb36
Release 0.3.3.
12 years ago
Vincent Driessen
d1c2b3b78d
Merge branch 'selwin-remove-logbook'
...
Conflicts:
rq/utils.py
rq/worker.py
setup.cfg
setup.py
12 years ago
Vincent Driessen
37b3bb4bd4
Have Worker.work() setup logging.
...
Basically, I don't want to enforce users to configure _any_ logging
stack when writing a basic worker, like this:
from rq import Worker, Queue, Connection
with Connection():
q = Queue()
w = Worker([q])
w.work(burst=True)
In case you want to disable logging altogether, you can configure your
logging stack to do so.
12 years ago
Vincent Driessen
90b15fd0b6
Don't silently fail when unpickling.
...
When a pickled job string can't be unpickled because some required
module isn't loadable, this leads to an `UnpickleError` in the worker
(not in the horse).
Currently we just assume "garbage" in the job's data field, and silently
ignore it.
This is bad.
Really bad.
Because it avoids the normal exception handling mechanism that RQ has.
Historically, this "feature" was introduced to ignore any invalid pickle
data ("bad strings") on queues, and go on. However, we must assume data
inside `job.data` to be valid pickle data.
While an invalid _format_ of pickle data (e.g. the string "blablah"
isn't valid) leads to unpickle errors, unpickling errors will also occur
when the job can't be validly constructed in memory for other reasons,
like being unable to load a specific class.
Django is a good example of this: try submitting jobs that use
`django.conf.settings` while the `DJANGO_SETTINGS_MODULE` env var isn't
set. Currently, RQ workers will drop these jobs and dismiss them like
any non-valid pickle data. You won't be notified.
This patch changes RQ's behaviour to never ignore invalid string data on
any queue and _always_ handle these errors explicitly (but without
bringing the main loop down, of course).
12 years ago
Selwin Ong
40d0a7d9a9
Removed __main__ that was accidentally added to rqworker script.
12 years ago
Selwin Ong
d1f586b413
Only configure logging handlers if not already present.
12 years ago
Javier Rey
d660b611db
ended_at time is now saved when job is finished
12 years ago
Selwin Ong
f498de57b6
Always call job.save even on synchronous queues so get_current_job doesn't fail
12 years ago
Vincent Driessen
10237ddcb4
Merge branch 'job-access-within-job'
...
Conflicts:
CHANGES.md
rq/job.py
12 years ago
Ulrich Petri
ba57f104ff
Switched config file loading to import lib to allow dotted "paths" to settings modules
12 years ago
Jon Parise
e90efc254b
Use `redis.from_url()` for greater compatibility.
...
This lets us keep the redis-py version requirement back at 2.4.13.
12 years ago
Jon Parise
eb00f69ced
Add a standard --url argument to all scripts.
...
redis-py now supports URL-based connection configuration. When --url
is specified, we use it to construct the Redis object. Otherwise, we
use the existing argument-based construction method.
`Redis.from_url()` is new in redis-py 2.6.2, so that prerequisite has
been adjusted accordingly.
12 years ago
Alexander Saltanov
0e638d795b
Don't show traceback in rqinfo when ^C is pressed.
12 years ago
Vincent Driessen
d80fa53d7e
Ugh. Syntax.
12 years ago
Vincent Driessen
11794ccef5
Merge branch 'sburns-no-colorize-notty'
12 years ago
Vincent Driessen
435cbc0f53
Simplify a bit.
12 years ago
Scott Burns
59a01b49f4
Don't colorize non-tty stdout/err
12 years ago
Vincent Driessen
9ff5b18ebb
Merge branch 'sburns-decorator-ttl'
12 years ago
Vincent Driessen
4e6b19d5ab
Bump version number.
12 years ago
Vincent Driessen
5e59c6e28e
Rename the const.
12 years ago
Scott Burns
538bbb1b55
Decorator accepts result_ttl argument
12 years ago
Timo Steidle
881b944283
Changed status "Running" into "started" to be more consistent with the other statuses
12 years ago
Timo Steidle
8787cfbb30
Added new job status "Running"
12 years ago
Vincent Driessen
c0df77f84d
Support QUEUES as a config setting in settings files.
12 years ago
Vincent Driessen
81270c8e59
Support REDIS_PASSWORD setting in settings.
12 years ago
Scott Burns
c705a2f06a
Expose Redis password to scripts
...
Allow rqworker and rqinfo to connect to
password-protected Redis hosts.
12 years ago
Vincent Driessen
7ff6ed72da
Add backward compat (will be removed in 0.4).
...
This is to support users that are relying on the current custom property
implementation. A warning will be displayed on the console, stating
that this support will be removed from RQ version 0.4.
12 years ago
Vincent Driessen
8cb6a21670
Only store custom properties when they're written to the meta dict.
12 years ago
Vincent Driessen
a247c6eaa1
Merge branch 'master' into remove-logbook
12 years ago
Vincent Driessen
4b66d7af41
Merge branch 'master' into job-access-within-job
...
Conflicts:
rq/job.py
12 years ago
Vincent Driessen
8581cd6463
Don't allow jobs without Redis connection.
...
And other connection-related fixes.
12 years ago
Vincent Driessen
f9137311b5
Release version 0.3.2.
12 years ago
Vincent Driessen
2f578a4c2d
Avoid dict comprehension for compatibility.
...
This fixes #128 .
12 years ago
Graeme Coupar
365d1d8226
Fixed argument handling in rqinfo
...
rqinfo was using None for the redis host and port, which was causing
exceptions when trying to connect. It was possible to supply these on
the commandline, but port was just being passed straight through as a
string, which also caused exceptions.
This commit moves some of the argument & configuration file handling out
of rqworker and into the scripts/__init__.py file, and then calls it
from rqinfo.
12 years ago
Vincent Driessen
95d3aed98e
Store the job ID on the internal stack.
...
It does so instead of the instance itself. Still returns the job---the
interface hasn't changed.
12 years ago
Vincent Driessen
372de4b45a
Implement the get_current_job() function.
...
This fixes #125 .
12 years ago
Vincent Driessen
879a87d158
Remove logbook and replace it with logging.
...
This reverts commit 1ab8c19696
and
reintroduces all changes made by @dstufft.
Still, it needs more patches to reeanble the default log-to-console
behaviour. See #121 .
12 years ago
Vincent Driessen
1ab8c19696
Revert "Remove logbook and replace it with logging".
...
This reverts the commit range f367c38..978ba2d.
Issue #121 is currently blocking the 0.3.1 release.
13 years ago
Vincent Driessen
a6e57dd7c0
Fix: change import path before importing settings module.
13 years ago
Vincent Driessen
ce1da3f5ca
Add support for configuration RQ workers with Sentry with a single flag.
...
This fixes #122 .
13 years ago
Vincent Driessen
1687633c07
Add support for passing configuration files to rqworker.
...
This fixes #123 .
13 years ago
Vincent Driessen
781f3e0460
Add test for custom exc handling.
13 years ago
Vincent Driessen
db80be4ef7
Fix typos.
13 years ago
Vincent Driessen
db4ec16be8
Also report job description.
13 years ago
Vincent Driessen
502bf59399
Add convenience directive to easily configure Sentry with RQ.
13 years ago
Vincent Driessen
cdc3a6c7a9
Convenience exc_handler registration in __init__.
...
Allow custom exception handlers to be passed in in the Worker
constructor.
13 years ago
Vincent Driessen
f457bd9da2
Remove incorrect arg to pop_exc_handler method.
13 years ago
Vincent Driessen
daa8f38b4b
Improve formatting of the exceptions on the console.
13 years ago
Vincent Driessen
a20deb2c52
Add custom exception handling capabilities.
...
This fixes #95 .
13 years ago
Vincent Driessen
a017756748
Fetch fresh status value on every request.
...
It could probably require a bit of caching, to prevent too many fetches
per time slot (for example, return the locally cached value if that
value is as fresh as a second or so).
This fixes #120 .
13 years ago
Vincent Driessen
35761a0d71
Merge branch 'selwin-persist-None-result'
13 years ago
Vincent Driessen
6b0ebe9ceb
Remove is_done property.
...
It is too similar to is_finished.
13 years ago
Vincent Driessen
bc7e32bae8
Add expiry info to the worker log.
13 years ago
Vincent Driessen
4b797fbf43
Don't use strings, but comments.
13 years ago
Vincent Driessen
9549b34d60
Add convenience accessor properties for status.
13 years ago
Vincent Driessen
4224304291
I like this implementation of an 'enum' better.
13 years ago
Selwin Ong
41946d1bb3
Worker.find_by_key now properly uses connection.
13 years ago
Selwin Ong
442b389b97
Job returning None as result are now persisted correctly.
...
Job status can now be checked via ``status`` property which should
return either "queued", "finished" or "failed".
13 years ago
Vincent Driessen
f06ef9c975
Merge branch 'selwin-async-2'
...
This fixes #114 .
13 years ago
Vincent Driessen
e2a0d83eee
Whoops.
13 years ago
Vincent Driessen
83369f3b9b
Prefer `result` over `return_value`.
...
`return_value` still is available as a backward-compatible accessor.
This fixes #116 .
13 years ago
Selwin Ong
06d75630e0
Execute job immediately if Queue(async=False)
13 years ago
Donald Stufft
58ccd337c0
Don't hardcode a name into logging.getLogger
13 years ago
Donald Stufft
66235f7ad0
Switch to using slightly more pythonic log code
13 years ago
Donald Stufft
aeb17d0497
Make the rqworker script use the logging module instead of logbook
13 years ago
Donald Stufft
82c4ac6ec2
Add a Handler that enables colorized output
13 years ago
Vincent Driessen
f367c38132
Bump version number and add changelog.
13 years ago
Vincent Driessen
720011c33e
Merge branch 'selwin-result_ttl'
13 years ago
Vincent Driessen
a9cb201d39
PEP8ify.
13 years ago
Vincent Driessen
5963ec6d77
Try to make the expiration code a bit more readable.
13 years ago
Vincent Driessen
4b2838943b
Rename rv_ttl to default_result_ttl.
13 years ago
Vincent Driessen
78864e2581
PEP8ify.
13 years ago
Selwin Ong
a5e6765990
Added "result_ttl" property on jobs that determines how long job results are persisted in Redis.
13 years ago
Vincent Driessen
5f4bb8dfc5
Fix word ordering.
13 years ago
Vincent Driessen
5cbc59205a
Add changelog and bump version to 0.3.0.
13 years ago
Vincent Driessen
1177caf4bf
Set state to busy as early as possible.
13 years ago
Vincent Driessen
f2d5ebf2fe
Merge branch 'master' into selwin-warm-shutdown-2
...
Conflicts:
rq/worker.py
13 years ago
Vincent Driessen
1536546613
Worker/horse distinction in signal handler is obsolete.
13 years ago
Vincent Driessen
a6bb526773
Fix that doens't abort the currently running job on Ctrl+C.
13 years ago
Vincent Driessen
9bfd686be3
Merge hotfix/0.2.2
13 years ago
Vincent Driessen
4d9881eef2
Print version number when running the server.
13 years ago
Vincent Driessen
080431702d
Bump the version.
13 years ago
Vincent Driessen
1bc0c3d223
Fix bug where pickling the return value caused an uncaught exception.
13 years ago
Selwin Ong
a4f1de358f
Raise a StopException when Control+C is pressed.
13 years ago
Vincent Driessen
4057ae768b
Merge branch 'selwin-decorator'
13 years ago
Vincent Driessen
2cb058e91a
PEP8ify.
13 years ago
Vincent Driessen
d697ddb93a
Resolve connections early.
...
Fixes #101 .
13 years ago
Vincent Driessen
dbf101bc06
Update comment.
13 years ago
Vincent Driessen
a1d08a64fc
Add @wraps() call.
13 years ago
Vincent Driessen
6b79e51033
PEP8ify.
13 years ago
Vincent Driessen
ea19bdc910
Merge branch 'new-enqueue' into selwin-decorator
13 years ago
Vincent Driessen
abac4a5f41
Since we only have the timeout option, don't be too generic.
13 years ago
Selwin Ong
8c3292d35b
Make "queue" argument in job decorator required.
...
job decorator now uses Queue's "enqueue_call" method.
13 years ago
Selwin Ong
ae97f862dc
Merge branch 'master' into decorator
13 years ago
Vincent Driessen
f6374f2dfa
Add new way of invoking .enqueue(), either implicitly or explicitly.
13 years ago
Vincent Driessen
e6bb7de8c0
Get rid of the ambiguity when passing the timeout argument to .enqueue() calls.
13 years ago
Vincent Driessen
f6e67431d7
Refactor the .enqueue() API to not gobble the timeout kwargs.
...
This fixes #98 .
13 years ago
Vincent Driessen
8436d9b2c8
PEP8ify.
13 years ago
Selwin Ong
bdc1af28d1
Added a job decorator.
13 years ago
Vincent Driessen
a2b9c6ce86
Bump the version.
13 years ago
Vincent Driessen
1a178d673b
Fix bug where results wasn't correctly unpickled when refreshing from Redis.
13 years ago
Vincent Driessen
987e8fe77f
Bump version.
13 years ago
Vincent Driessen
0b66bbaab1
Merge branch 'sleekslush-master'
13 years ago
Vincent Driessen
a032896453
Add means of specifying the job function using strings.
13 years ago
Vincent Driessen
84988bdf94
Fix typo.
...
This fixes #85 .
13 years ago
Vincent Driessen
074af72536
Minor fix for empty dict check.
13 years ago
Selwin Ong
809874ee83
Don't store Job's "_instance" attribute in Redis.
13 years ago
Vincent Driessen
604fce99a1
Merge with master.
13 years ago
Selwin Ong
1fb0a1bfac
Modified ``Job`` ``save`` and ``refresh`` methods to support persisting
...
additional ``Job`` attributes into Redis.
13 years ago
Vincent Driessen
cfbbc3d0ea
Merge remote-tracking branch 'omarkhan/instance_methods'
13 years ago
Omar Khan
03bd49511d
Allow instance methods to be enqueued
...
Only works for picklable instances
13 years ago
Goran Peretin
34d161eb11
requeueing preserves job timeout
13 years ago
Goran Peretin
317a58a3b5
quarantine preserves job timeout
13 years ago
Jonas
c99cab71cd
Use a non-zero exitcode on errors in scripts
...
When a worker can't connect to Redis, return
a non-zero exit code so supervisor processes
can act accordingly.
13 years ago
Jonas
415a159ac3
Pass connection explicitly to Job.fetch
13 years ago
Vincent Driessen
074d42fe54
Remove strict procname dependency.
...
This fixes #80 .
13 years ago
Craig Slusher
2729b5435f
Uses push_connection() and pop_connection()
13 years ago
Vincent Driessen
697a4a89f8
Actually use any given default_timeout for queues.
13 years ago
Vincent Driessen
a5d9ed0a0d
Add change notes.
13 years ago
Selwin Ong
50ba003cee
Worker's "all" and "find_by_key" methods should accept "connection" as argument.
13 years ago
Vincent Driessen
c423cab770
Bump version number.
13 years ago
Vincent Driessen
7c69ad9182
Bump the version number.
13 years ago
Vincent Driessen
11f91508c6
Merge pull request #63 from selwin/master
...
Queue.lpop now takes connection as an argument. Thanks, @selwin!
13 years ago
Selwin Ong
5989228330
Queue.lpop should take connection as argument.
13 years ago
Wichert Akkerman
ec0e4776b4
Move common code out.
13 years ago
Wichert Akkerman
9f7d608da8
Renaming typo..
13 years ago
Wichert Akkerman
2d4a58631d
PyFlakes
13 years ago
Wichert Akkerman
97d2e4d784
Use console_scripts instead of scripts.
...
Unfortunately zc.buildout does not support distribute/setuptools script
option (see https://bugs.launchpad.net/zc.buildout/+bug/422724 ), but it
does support console_scripts. This also makes the scripts importable,
allowing for unittest and code reuse.
13 years ago
mattdennewitz
9f2f9e367c
Class methods now use given "cls"
13 years ago
Vincent Driessen
b886ba76de
Fix AttributeError.
13 years ago
Vincent Driessen
c337afde3a
Make the connection stack thread safe.
...
For this, I've included Werkzeug's context locals, which offers both
thread and greenlet safe local variables.
This fixes #47 .
13 years ago
Vincent Driessen
25d3f94c9f
Use the true Python 2.7 stdlib implementation instead.
13 years ago
Vincent Driessen
4885458dde
Move this hack to a separate file.
13 years ago
aiko1895
d26db69cbd
added backport of total_ordering to work with 2.6
13 years ago
Vincent Driessen
100d23b72e
Tag the first public release.
13 years ago
Vincent Driessen
a7c229ddb1
Reflect new API in the RQ scripts.
13 years ago
Vincent Driessen
2982486448
New connection management.
...
Connections can now be set explicitly on Queues, Workers, and Jobs.
Jobs that are implicitly created by Queue or Worker API calls now
inherit the connection of their creator's.
For all RQ object instances that are created now holds that the
"current" connection is used if none is passed in explicitly. The
"current" connection is thus hold on to at creation time and won't be
changed for the lifetime of the object.
Effectively, this means that, given a default Redis connection, say you
create a queue Q1, then push another Redis connection onto the
connection stack, then create Q2. In that case, Q1 means a queue on the
first connection and Q2 on the second connection.
This is way more clear than it used to be.
Also, I've removed the `use_redis()` call, which was named ugly.
Instead, some new alternatives for connection management now exist.
You can push/pop connections now:
>>> my_conn = Redis()
>>> push_connection(my_conn)
>>> q = Queue()
>>> q.connection == my_conn
True
>>> pop_connection() == my_conn
Also, you can stack them syntactically:
>>> conn1 = Redis()
>>> conn2 = Redis('example.org', 1234)
>>> with Connection(conn1):
... q = Queue()
... with Connection(conn2):
... q2 = Queue()
... q3 = Queue()
>>> q.connection == conn1
True
>>> q2.connection == conn2
True
>>> q3.connection == conn1
True
Or, if you only require a single connection to Redis (for most uses):
>>> use_connection(Redis())
13 years ago
Vincent Driessen
6bc173f122
Bugfix.
13 years ago
Vincent Driessen
28216cf63a
Implement the requeue_job() top-level API function.
...
This completely fixes #37 .
13 years ago
Vincent Driessen
c684949045
Don't expose the FailedQueue class at the top-level.
...
This fixes #36 .
13 years ago
Vincent Driessen
98ea29b15a
Don't expose the Job class at the top-level.
...
This partially fixes #37 .
13 years ago
Vincent Driessen
0b837b4b12
Don't warn. In fact, we rely on this the more.
13 years ago
Vincent Driessen
15342f14d3
Store pickled function calls as strings.
...
This aids unpacking in the case of a function that isn't importable from
the worker's runtime. The unpickling will now (almost) always succeed,
and throw an ImportError later on, when the function is actually
accessed (thus imported implicitly).
The end result is a job on the failed queue, with exc_info describing
the import error, which is tremendously useful.
13 years ago
Vincent Driessen
14ecb8e956
Add specifics on the "ImportError" to the message in case of an attribute error.
13 years ago
Vincent Driessen
844c5ed8c7
Add @slow wrapper to avoid running slow tests.
...
Use ./run_tests -f to only run the fast tests.
13 years ago
Vincent Driessen
000849c430
Initialize jobs with timeouts.
13 years ago
Vincent Driessen
b8305a818f
Safer, and shorter, version of the death penalty.
...
This case protects against JobTimeoutExceptions being raised immediately
after the job body has been (successfully) executed. Still,
JobTimeoutExceptions pass through naturally, like any other exception,
to be handled by the default exception handler that writes failed jobs
to the failed queue.
Timeouts therefore are reported like any other exception.
13 years ago
Vincent Driessen
8a856e79ea
Initial attempt at job timeouts.
13 years ago
Vincent Driessen
fb587297f6
Requeue should not error when called on a deleted job ID.
13 years ago
Vincent Driessen
7ef3b5ade8
Cleanup job hashes for jobs without result, too.
13 years ago
Vincent Driessen
5717a0ba15
Rename Job.for_call() -> Job.create().
...
This fixes #34 .
13 years ago
Vincent Driessen
7e0b843d06
Implement requeue() method on FailedQueue.
13 years ago
Vincent Driessen
8e85c7eee3
Put Job directly in the top-level `rq` module.
13 years ago
Vincent Driessen
240d2d941d
Extracted method.
...
This makes the act of moving failed jobs to the failed queue
responsibility of the FailedQueue itself, not of the Worker.
This fixes #32 .
13 years ago
Vincent Driessen
d64ad225eb
Make FailedQueue a full subclass of Queue.
...
We will add special methods on it in the future.
This fixes #33 .
13 years ago
Vincent Driessen
6f05e03293
Clean up some of the dummy jobs used for testing.
...
Also, add a random_failure test.
13 years ago
Vincent Driessen
06ce9622ea
Add compact() method on Queues, to remove dead messages.
13 years ago
Vincent Driessen
70cbf00890
Refactor out an exists() and a for_key() method.
13 years ago
Vincent Driessen
c49e564d3c
Don't break the API when jobs get deleted.
13 years ago
Vincent Driessen
bd08f24f15
Cosmetic changes to the command line output.
13 years ago
Vincent Driessen
e4055ca42f
Allow queues to be emptied.
13 years ago
Vincent Driessen
9e33e1a08f
Implement a cancel() method on jobs.
...
This fixes #29 .
13 years ago
Vincent Driessen
0a0d9d1ceb
Flake8 style fixes.
13 years ago
Vincent Driessen
1a8b80604d
Minor refactoring to make the to-failed queue code a bit more readable.
13 years ago
Vincent Driessen
11c7dbb376
Consistently renamed "failure" -> "failed" queue.
...
Fixes #28 .
13 years ago
Vincent Driessen
9f5b1545b6
Fix: store the job result in the correct key.
...
And expire job hash in Redis after 500 seconds (by default).
Fixes #27 .
13 years ago
Vincent Driessen
7bda1ca969
Encapsulate the result property (it should not directly be set).
13 years ago
Vincent Driessen
6266f68310
Style fixes (flake8).
13 years ago
Vincent Driessen
8da204f74a
Always use cPickle, never 'regular' pickle.
...
This fixes #18 .
13 years ago
Vincent Driessen
9318825429
Abstract away from the concrete pickle implementation.
...
Choose cPickle, if available, for best performance.
13 years ago
Vincent Driessen
90a458ca8e
Add more colorful terminal output.
...
For better visual parsability.
13 years ago
Vincent Driessen
63ef198fd6
Improve work generator.
13 years ago
Vincent Driessen
791f8169f5
Remove dead code.
13 years ago
Vincent Driessen
e05acfedce
Fix putting jobs on the failure queue when they fail.
13 years ago
Vincent Driessen
7c903e45ef
Simplify the persistence of jobs.
...
Fixes #23 and #24 .
13 years ago
Vincent Driessen
bffe6cbbde
Encapsulate internal function call representation.
...
This means it's not allowed anymore to directly set func, args, and
kwargs. Instead, use the for_call() constructor.
13 years ago
Vincent Driessen
370399f8f7
CHECKPOINT: dequeue_any now returns the queue that was popped from.
13 years ago
Vincent Driessen
f516f8df2e
CHECKPOINT: Handle failing and unreadable jobs.
...
Failing (or unreadable) jobs are correctly put on the failure queue by
the worker now.
13 years ago
Vincent Driessen
b1650cb9b9
CHECKPOINT: Second part of the big refactoring.
...
Jobs are now stored in separate keys, and only job IDs are put on Redis
queues. Much of the code has been hit by this change, but it is for the
good.
No really.
13 years ago
Vincent Driessen
65105b44c3
CHECKPOINT: Initial part of the big refactor.
13 years ago
Vincent Driessen
fcca48a9d7
Rename empty property -> is_empty() method.
13 years ago
Vincent Driessen
4d2f64d4b6
Mental note to self.
13 years ago
Vincent Driessen
20e908039f
Initially set the exc_info property, so it does not raise an
...
AttributeException when accessed.
13 years ago
Vincent Driessen
fdce187c27
Putting failed jobs on the failure queue.
13 years ago
Vincent Driessen
7eb8d92605
Put unreadable tasks on the failure queue.
13 years ago
Vincent Driessen
0be1cb6ac0
Change the way jobs are pickled.
...
There is no job tuple anymore, but instead Jobs are picklable by
themselves natively. Furthermore, I've added a way to annotate Jobs
with created_at and enqueued_at timestamps, to drive any future Job
performance stats. (And to enable requeueing, while keeping hold of the
queue that the Job originated from.)
This fixes #17 .
13 years ago
Vincent Driessen
0503eb2829
Clarified responsibility of the Job class.
...
The Job itself has nothing to do with queueing and dequeueing, so the
DequeueError wasn't appropriate here, either.
13 years ago
Vincent Driessen
db5753b0d6
Put Job in its own file.
13 years ago
Vincent Driessen
210477c2ab
Throw DequeueError when reading unprocessable data from queue.
13 years ago
Vincent Driessen
62ae299114
Fix mathematical meaning of the < operator.
...
This is used for alphabetical queue ordering.
13 years ago
Vincent Driessen
5c6f002878
Silently pass when trying to kill child that is already dead.
...
This fixes #16 .
13 years ago
Vincent Driessen
039a132374
Add ellipsis, to indicate we're waiting here.
13 years ago
Vincent Driessen
66775b7012
Put the version number somewhere central.
13 years ago
Vincent Driessen
aecb0a1bf0
Simplify calling .work() or .work(burst=True).
13 years ago
Vincent Driessen
636b6690d6
Add the signal name to the debug message.
13 years ago
Vincent Driessen
a154ef0bd9
Remove comment.
...
This ain't the right way to terminate when blocking by pop.
13 years ago
Vincent Driessen
62949c9adb
Extra debug output.
13 years ago
Vincent Driessen
dde3ea8ef7
Take down horse process when the worker is terminated.
13 years ago
Vincent Driessen
4ac243b3e8
Print what signal was received in a debug statement.
13 years ago
Vincent Driessen
7769d9875f
Perform a warm shutdown on SIGTERM, too.
...
Just like with Ctrl+C (SIGINT), shutdown warmly at first when kill'ed
(SIGTERM).
13 years ago
Vincent Driessen
88cbaa1df9
Slight code reshuffle + added some comments on the construction.
13 years ago
Vincent Driessen
7cba8449d9
Add comments.
13 years ago
Vincent Driessen
1cbf92c166
Workaround for os.waitpid() throwing an OSError on SIGINT.
...
When SIGINT (``Ctrl+C``) is received when inside a blocking
os.waitpid(), OSError is thrown, effectively cancelling the wait.
However, to facilitate a "warm shutdown", as we intend, Ctrl+C is
perfectly allowed and we want to keep waiting for the child. Therefore,
we perform a trick here, catching OSError, checking whether its cause
was SIGINT (errno == EINTR), and only in that case, loop to os.waitpid()
again.
13 years ago
Vincent Driessen
e278bd2967
Exit gracefully when user hits Ctrl+C in a worker.
...
The currently running task will be waited for, so it can gracefully
be finished. Further execution will be stopped.
If, during this waiting phase, Ctrl+C is hit again, the worker and the
horse will be terminated forcefully (this means work could be lost or
partially finished).
13 years ago
Vincent Driessen
ba965a1dd9
Minor text change
13 years ago
Vincent Driessen
2d2b351f7c
Change logging format.
13 years ago
Vincent Driessen
8678f26df0
Factor out call string.
13 years ago
Vincent Driessen
2ec12f1775
Fix bugje.
13 years ago
Vincent Driessen
1358246238
Better logging output.
13 years ago
Vincent Driessen
1dd73cb28d
Fix comment.
13 years ago
Vincent Driessen
cc8f05b3c6
Add __str__ to Job.
13 years ago
Vincent Driessen
55fd393626
Worker.find_by_key method now returns None for nonexisting workers.
13 years ago
Vincent Driessen
507558f6bc
Avoid forked work horse to register death of its parent worker.
13 years ago
Vincent Driessen
bd1778c610
Fix comment typo's.
13 years ago
Vincent Driessen
4ad6281641
Rewrite the ANSI color formatter a bit.
13 years ago
Vincent Driessen
edcc012b2d
Document the Queue class.
13 years ago
Vincent Driessen
45700fc788
Delete unused file.
13 years ago
Vincent Driessen
c9ba66bd59
Register workers in a central set ("rq:workers").
13 years ago
Vincent Driessen
1f12678468
Get Worker fetch methods.
13 years ago
Vincent Driessen
9e8a4d15be
Document methods.
13 years ago
Vincent Driessen
6013227f4c
Remove unused property.
13 years ago
Vincent Driessen
aebfe74630
Add polling/scaling graphs.
13 years ago
Vincent Driessen
a905961f94
Add some sample scripts.
13 years ago
Vincent Driessen
a029e5437b
Add beginnings of a rqworker script.
13 years ago
Vincent Driessen
d780c929c0
Change semantics of work(). Add work_burst().
...
work() will now start the worker run loop, and work_burst() now leads to
the burst-then-quit behaviour.
13 years ago
Vincent Driessen
a491ff248d
Add simple helper function, to avoid users to learn about the `conn`
...
stack.
This makes it easier to start using the product.
13 years ago
Vincent Driessen
0ff2984adf
Use __slots__, for minimal memory overhead.
13 years ago
Vincent Driessen
56c4445bb2
Shut up pyflakes.
13 years ago
Vincent Driessen
b5ea5f32fe
Variable renamed.
13 years ago
Vincent Driessen
8852859fc4
Improved the __repr__ and __str__ of Queues.
13 years ago
Vincent Driessen
b4c1c85276
Add equality and comparison methods.
13 years ago
Vincent Driessen
a5ea45af57
Make the dequeue methods return values consistent.
...
I merely refactored the internal calls. No external API changes have been made in this commit. In order to make the dequeueing methods consistent, each dequeue method now returns a Job instance, which is just a nice lightweight wrapper around the job tuple.
The Job class makes it easier to pass the method call info around, along with some possible meta information, like the queue the job originated from.
This fixes #7 .
13 years ago
Vincent Driessen
f492a5ae2b
Restructure some code.
...
No functional change, but leave the BLPOP'ing to the Queue, as the
queues know how to pop themselves.
13 years ago
Vincent Driessen
1a893e60cf
Have work() return whether work has been done, or not.
...
And promote Worker to the rq namespace, so you can
from rq import Worker
13 years ago
Vincent Driessen
1c9fa66bc1
Greatly simplify the setup.
...
Jobs don't even need to be tagged. Any function can be put on queues.
13 years ago
Vincent Driessen
62b6b180f3
Also allow args and kwargs to enqueue() calls on Queue.
13 years ago
Vincent Driessen
196a9815d2
Add dequeue method to Queue.
13 years ago
Vincent Driessen
b5e0377eb0
Allow jobs to be declared without a default queue.
...
This makes it impossible to use delay() on them. Instead, you should
use enqueue().
13 years ago
Vincent Driessen
407f3e8b38
Add ability to put work on alternate queues.
13 years ago
Vincent Driessen
1b8da4a861
Add test for putting work on queues.
13 years ago
Vincent Driessen
8dfdd452ef
Bugfix.
...
Yeah, it's getting late.
It's my own fault.
I know.
13 years ago
Vincent Driessen
04c88577ed
Bugfix: LPOP does not support multiple queue arguments.
...
Redis' BLPOP command takes multiple queue arguments, but LPOP can only
take a single queue. Therefore, we need to loop over all queues
manually, in order, and raise an exception is no more work is available.
13 years ago
Vincent Driessen
a77c3d9104
Support quitting when all work is done (i.e. queue is empty).
13 years ago
Vincent Driessen
8dc2b15a6e
Remove empty file.
...
It is obsoleted by rq/proxy.py
13 years ago
Vincent Driessen
98ffcd8e05
Create soft dependency on logbook.
13 years ago
Vincent Driessen
227e107a82
Oops, fix some old references to current_connection.
13 years ago
Vincent Driessen
d721f0708b
Refactor the whole Redis connection stuff to be just as easy as in RDB.
13 years ago
Vincent Driessen
518db8c24b
Add better connection management.
...
To start using RQ, push a Redis connection up its stack, like so:
from rq import push_connection
push_connection(Redis())
13 years ago
Vincent Driessen
d8d388c841
Log the results of jobs.
13 years ago
Vincent Driessen
f21b2af2b6
Make it an actual PyPI-managable Python package.
13 years ago