Changelog¶
All notable changes to this project will be documented in this file.
Unreleased¶
1.17.1 – 2024-10-26¶
Fixed¶
Added¶
Changed¶
The actor decorator now checks for duplicate actor names. (#640, #641, @z0z0r4)
The Retries middleware now tracks when a message was last requeued on retry. (#629, @kuba-lilz)
1.17.0 – 2024-05-09¶
Added¶
Middleware hooks for after consumer & worker thread boot. (#619, @kamalmarhubi)
Changed¶
The =watch= extras now require Watchdog version 4.0+.
Fixed¶
The
python_requires
version insetup.py
. (#606, @niccodemus)The result middleware now takes message options into account. (#612, @huwylphimet)
1.16.0 – 2024-01-25¶
Fixed¶
The
CurrentMessage
middleware now works under AsyncIO. (#586, #593, @pahrohfit)Improved logging behavior under different buffer modes. (#596, @5tefan)
Added¶
1.15.0 – 2023-10-23¶
Fixed¶
The
global_broker
variable is now type hinted. (@jenstroeger)Pipeline result retrieval works with non-default brokers. (#563, #564, @DiegoPomares)
Added¶
Asyncio support. (#536, @caspervdw)
Changed¶
1.14.2 – 2023-03-25¶
Fixed¶
Restored
namedtuple
instance methods onMessage
. (#538)
1.14.1 – 2023-02-25¶
Fixed¶
Added missing
py.typed
file to distributions. (#531)
1.14.0 – 2023-02-05¶
Removed¶
Dropped Python 3.6 support as it reached end-of-life
Changed¶
1.13.0 – 2022-04-02¶
Fixed¶
Changed¶
Typing support has been improved. (#482, @staticdev)
The default broker now falls back to Redis if the RabbitMQ extras are not installed, in an attempt to make the getting started process easier. (#483, #486, @kurtmckee)
1.12.3 – 2022-01-16¶
Fixed¶
An issue where signals remained blocked after worker process boot. (#465, #466, @FinnLidbetter)
1.12.2 – 2022-01-14¶
Fixed¶
An issue where stopping the process too quickly after boot could lead to an
AttributeError
. (#463, #464, @FinnLidbetter)
1.12.1 – 2021-12-19¶
Fixed¶
Actors and messages can now specify 0 backoff. (@FinnLidbetter, #438)
An issue where Redis message ids could be put back onto the queue after ack/nack. (#442, #444)
Removed¶
Dropped Python 3.5 support as it reached end-of-life
1.12.0 – 2021-10-23¶
Added¶
RabbitMQ messages now have a
redelivered
flag. (#405, @nffdiogosilva)Time limits now work under gevent. (#408, @FinnLidbetter)
Shutdown notifications now work under gevent. (#426, @FinnLidbetter)
Changed¶
The
watchdog
library is no longer being pinned to a specific version. (#428)The redis broker now limits unpacks to half the size of the Lua stack. (#433, #434, @ethervoid)
Fixed¶
Async exceptions now correctly set the thread id on Python 3.7 and up. (#419, #420, @FinnLidbetter)
1.11.0 – 2021-05-22¶
Added¶
decode
now raises a new error,DecodeError
, on exception. (#375, @thomazthz)
Changed¶
The RabbitMQ broker moves messages that fail to decode to the DLQ. (#375, @thomazthz)
Fixed¶
The Redis broker is now more defensive in how it handles re-enqueueing messages. This should fix a potential race condition where a worker could hit its heartbeat timeout but still end up re-enqueueing messages (thus ending up with the same message id enqueued multiple times). (#266, #395)
A code path that could lead to an unbound variable error has now been fixed. (#382)
Deleting the connection off of a
RabbitMQ
broker now correctly closes it and its associated channel (if any) before removing it from the broker. (#381, #384)
1.10.0 – 2020-12-21¶
Added¶
The RabbitMQ broker dead message TTL can now be configured via the
dramatiq_dead_message_ttl
environment variable. (#354, @evstratbg)The CLI now supports referencing a callable to set up the broker on worker startup. (#350)
Changed¶
Fixed¶
The CLI now returns code
1
when one of the workers is killed by an unhandled signal. (#334, @omegacoleman)The results middleware now gracefully handles actor-not-found errors during nack. (#336, #337, @AndreCimander)
A memory bloat issue with tasks that raise exceptions. (#351)
1.9.0 – 2020-06-08¶
Added¶
A custom Redis connection can now be passed to the Redis broker via the new
client
keyword argument. (#274, @davidt99)Message priority can now be changed in
before_enqueue
hooks. (#313, @thomazthz)Support for storing actor exceptions. (#156)
Support for expected exceptions via the
throws
actor option. (#303, @takhs91)Support for changing the consumer class in the RabbitMQ and Redis brokers. (#316, @AndreCimander)
Changed¶
Fixed¶
1.8.1 – 2020-02-02¶
Fixed¶
An issue where an
IndexError
would be raised when multiple middlewre containing fork functions were defined. (#271)
1.8.0 – 2020-02-02¶
Added¶
Support for forking and running arbitrary functions (so-called “fork functions”). (#127, #230)
The
--fork-function
flag.The
--skip-logging
flag. (#263, @whalesalad)
Fixed¶
An issue where the
max_age
parameter toAgeLimit
was being ignored. (#240, @evstratbg)An issue with delaying pipelines. (#264, @synweap15)
An issue where the master process would sometimes hang when stopped. (#260, @asavoy)
An issue where the
RedisBroker
could sometimes prefetch more messages than it was configured to. (#262, @benekastah)The
StubBroker
now flushes its dead letter queue when itsflush_all
method is called. (#247, @CapedHero)The
RedisBroker
now takes the max lua stack size into account. This should fix certain heisenbugs that folks have encountered with that broker. (#259, @benekastah)
Changed¶
The
RabbitmqBroker
now creates its queues lazily. (#163, #270, @timdrijvers)The
Prometheus
middleware no longer depends on file locking to start its exposition server. Instead, it uses the new fork functions functionality to start the server in a separate, unique process. The middleware no longer takes any parameters. While this would normally be a breaking change, it appears those parameters were previously ignored anyway. (#127, #230)
1.7.0 – 2019-09-22¶
Added¶
Generic actors can now be passed custom actor registires. (#223, @jonathanlintott)
--use-spawn
command line argument. (#227, #228, @jrusso1020)
Changed¶
1.6.1 – 2019-07-24¶
Added¶
RabbitmqBroker
now supports multiple connection uris to be passed in via itsurl
parameter. (#216, @wsantos)
Changed¶
1.6.0 – 2019-05-02¶
Added¶
dramatiq_queue_prefetch environment variable to control the number of messages to prefetch per worker thread. (#183, #184, @xelhark)
The RabbitMQ broker now retries the queue declaration process if an error occurs. (#179, @davidt99)
Support for accessing nested broker instances from the CLI. (#191, @bersace)
Support for eagerly raising actor exceptions in the joining thread with the
StubBroker
. (#195, #203)Support for accessing the current message from an actor via
CurrentMessage
. (#208)
Changed¶
Pinned pika version >1.0,<2.0. (#202)
Fixed¶
An issue where workers would fail and never recover after the connection to Redis was severed. (#207)
pipe_ignore
has been fixed to apply to the next message in line within a pipeline. (#194, @metheoryt)
1.5.0 – 2019-02-18¶
Added¶
The RabbitMQ broker now supports native message priorities. (#157, @davidt99)
Support for specifying the actor class to
actor
. (#169, @gilbsgilbs)
Changed¶
Pika 0.13 is now required.
Fixed¶
1.4.3 – 2019-01-08¶
Fixed¶
Changed license classifier to the correct license. This is why you shouldn’t publish changed before you’ve had coffee, folks!
1.4.2 – 2019-01-08¶
Fixed¶
License classifier in PyPI package. There were no source code changes for this release.
1.4.1 – 2018-12-30¶
Added¶
Support for redis-py 3.x. (#142, @maerteijn)
Fixed¶
1.4.0 – 2018-11-25¶
Added¶
Changed¶
cli.main
now takes an optional argument namespace so that users may define their own entrypoints. (#140, @maerteijn)Actor “message received” and “completed in x ms” log messages are now logged with the
DEBUG
level instead ofINFO
level. This improves throughput and makes logging much less verbose.The
TimeLimit
middleware no longer uses signals to trigger time limit handling. Instead it uses a background thread per worker process.Dramatiq now shuts itself down if any of the workers die unexpectedly (for example, if one of them is killed by the OOM killer).
Windows is now supported (with some caveats)! (#119, @ryansm1)
Fixed¶
1.3.0 – 2018-07-05¶
Changed¶
Fixed¶
1.2.0 – 2018-05-24¶
Added¶
Support for worker heartbeats to
RedisBroker
.maintenance_chance
andheartbeat_timeout
parameters toRedisBroker
.Interrupt
base class for thread-interrupting exceptions. (@rpkilby)ShutdownNotifications
middleware. (@rpkilby)
Changed¶
TimeLimitExceeded
is now a subclass ofInterrupt
.
Fixed¶
StubBroker.join
andWorker.join
are now more reliable.Module import path is now prepended to search path rather than appended. This fixes an issue where importing modules with the same name as modules from site-packages would end up importing the modules from site-packages. (#88)
Prometheus
middleware no longer wipes the prometheus data directory on startup. This fixes an issue with exporting application metrics along with worker metrics.
Deprecated¶
requeue_{deadline,interval}
parameters toRedisBroker
. These two parameters no longer have any effect.
1.1.0 – 2018-04-17¶
Added¶
confirm_delivery
parameter toRabbitmqBroker
.dead_message_ttl
,requeue_deadline
andrequeue_interval
parameters toRedisBroker
.url
parameter toRedis
rate limiter backend.url
parameter toRedis
result backend.timeout
parameter to all the brokers’join
methods. (#57)flush
andflush_all
methods toRedisBroker
. (#62)flush
andflush_all
methods toRabbitmqBroker
. (#62)
Changed¶
Cleaned up command line argument descriptions.
Deprecated¶
URLRabbitmqBroker
is deprecated. TheRabbitmqBroker
takes aurl
parameter so use that instead.URLRabbitmqBroker
will be removed in version 2.0.
Fixed¶
rabbitmq
andwatch
extra dependencies are only installed when they are explicitly required now. (#60, @rpkilby)signal handling from the master process on FreeBSD 10.3. (#66)
reloading now uses
sys.executable
when exec’ing workers that were started withpython -m dramatiq
.an issue that caused logging to fail when non-utf-8 characters were printed to stdout/err. (#63)
an issue with potentially drifting keys in the
WindowRateLimiter
. (#69, @gdvalle)
1.0.0 – 2018-03-31¶
Added¶
--log-file
command line argument. (#43, @najamansari)--pid-file
command line argument. (#43, @najamansari)
Changed¶
Dramatiq is now licensed under the LGPL.
Fixed¶
Passing
time_limit
insend_with_options
. (#44)
0.20.0 – 2018-03-17¶
Added¶
--queues
CLI argument. (#35)
Changed¶
Unhandled errors within workers now print the full stack trace. (#42)
0.19.1 – 2018-03-08¶
Fixed¶
0.19.0 – 2018-01-17¶
Added¶
Changed¶
RateLimitExceeded
errors no longer log the full stack trace when raised within workers.Consumer connection errors no longer dump a stack trace.
Consumers now wait exactly 3 seconds between retries after a connection error, rather than using exponential backoff.
0.18.0 – 2018-01-06¶
Added¶
pip install dramatiq[all]
installs all deps.--path
command line argument. (#27)
Changed¶
pip install dramatiq
now installs RabbitMQ and watch deps.
0.17.0 – 2017-12-30¶
Added¶
Fixed¶
Pinned pika version 0.11 to avoid an issue where passing
heartbeat
toRabbitmqBroker
inget_broker
would raise aTypeError
. (#23, @chen2aaron)
0.16.0 – 2017-12-25¶
Added¶
long_running
example.scheduling
example.ResultBackends
now support pluggableEncoders
.
Changed¶
Redis
result backend is now considerably more resource-efficient (it no longer polls).sys.std{err,out}
are now redirected to stderr and line-buffered.
Fixed¶
TimeLimit
middleware now uses a monotonic clock.
0.15.1 – 2017-12-08¶
Fixed¶
Autoreload now works under gevent.
0.15.0 – 2017-11-24¶
Added¶
Fixed¶
Fixed bad file descriptor issue during RMQ broker shutdown under gevent.
0.14.0 – 2017-11-21¶
Added¶
Logging statements before and after an actor is called.
Fixed¶
class-based actors
behave more like normal Python classes now. (#15)
0.13.1 – 2017-11-17¶
Changed¶
Connection and import errors that occur during process boot now log stack traces (@rakanalh).
Added support for Python 3.5 (#7 by @jssuzanne).
0.13.0 – 2017-11-15¶
Added¶
Support for
class-based actors
(#9).
0.12.1 – 2017-11-15¶
Fixed¶
An
AssertionError
after starting the consumer if RabbitMQ is not running (#10).
0.12.0 – 2017-11-14¶
Added¶
url
parameter toRedisBroker
.
Fixed¶
Pending interrupt messages are now removed from pika’s queue before cancel is called. This fixes an issue where an
AtrributeError
was sometimes raised on worker shutdown.Pika connection reset logs from the main thread are now hidden.
Distribution of
dramatiq-gevent
(#2).
0.11.0 – 2017-11-09¶
Added¶
SkipMessage
middleware error.after_skip_message
middleware hook.join
now takes optionalmin_successes
andidle_time
parameters.
Changed¶
Consumer reconnect backoff factor has been lowered from 10s to 100ms.
URLRabbitmqBroker
is now a factory function that creates instances ofRabbitmqBroker
.
Fixed¶
Worker processes no longer use a spinlock to consume messages.
Consumers now use the same idle timeout as workers.
StubBroker
no longer declares dead letter queues.
0.10.2 – 2017-11-06¶
Changed¶
pika
is now pinned to>=0.10,<0.12
.
0.10.1 – 2017-11-04¶
Added¶
More benchmarks.
Fixed¶
StubBroker.flush_all
now flushes delay queues.
0.10.0 – 2017-10-30¶
Added¶
URLRabbitmqBroker
(@whalesalad).StubBroker
StubBroker.flush
andStubBroker.flush_all
.before_consumer_thread_shutdown
middleware hook.before_worker_thread_shutdown
middleware hook.
Changed¶
Implementation of the window rate limiter has been streamlined.
Redis requeue is now more efficient.
RabbitMQ enqueue is now resilient to disconnects.
Fixed¶
dramatiq-gevent
packaging (@bendemaree).
0.9.0 – 2017-10-20¶
Changed¶
Messages are no longer assigned new ids when they are re-enqueued. This makes tracking messages using middleware significantly easier.
The RedisBroker now assigns its own internal message ids.
0.8.0 – 2017-10-19¶
Changed¶
RabbitmqBroker no longer takes a ConnectionParameters param as input. Instead, it builds one based on kwargs.
exec
is now used to reload the main process on source code changes when the--watch
flag is enabled.
0.7.1 – 2017-10-08¶
Fixed¶
Lua files are now properly distributed with the package.
0.7.0 – 2017-09-13¶
Changed¶
Reworked scheduled messages to improve fairness. Messages are now re-enqueued on the broker once they hit their eta.
prometheus-client
has been pinned to version0.0.20
.
0.6.1 – 2017-07-20¶
Fixed¶
A race condition with calls to
cas
in the memcached rate limiter backend.
0.6.0 – 2017-07-09¶
Added¶
before
andafter
arguments toadd_middleware
.Support for
RateLimiters
.
0.5.2 – 2017-06-29¶
Changed¶
Changed the default max retries value from
None
to20
, meaning tasks are now retried for up to about 30 days before they’re dead-lettered by default.
0.5.1 – 2017-06-28¶
Removed¶
Dropped RabbitMQ heartbeat to avoid spurious disconnects.
0.5.0 – 2017-06-27¶
Added¶
Added
dramatiq-gevent
script.
Changed¶
Capped prefetch counts to 65k.