NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #3162 most downloaded on PyPI
Background Processing for Python 3.
Last release 1 months ago
02 Sep 2026
Ships fairly regularly
a new release about every 4 months
Nearly every release is documented
notes for 59 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
9 years old
73 releases · first in 2017
See the documentation changelog for more information about the release.
See the documentation changelog for more information about the release.
Full Changelog: v2.2.0...v2.2.1
One column per quarter.
Fixed an issue where Exceptions raised from async Actors would get caught in a reference cycle, preventing them from being immediately freed. This would lead to higher than necessary memory usage until the garbage collector runs. (#806, @frankie567, #878, `@LincolnPuzey`_)
In the RabbitMQ Broker, if the RabbitMQ server shuts down, catch the ConnectionWrongStateError exception that occurs when closing the connection from the Consumer. (#187, #885, `@LincolnPuzey`_, `@davidt99`_)
Experimental support for the free-threaded build of Python, for Python 3.14+. At this point, this means that the unit tests are run (and pass) on free-threaded Python. The codebase has not been audited to check for any thread-safety bugs that might be surfaced by running free-threaded Python. Feel free to try experimenting with Dramatiq and free-threaded Python, and if you encounter any problems please open an Issue! (#813, `@LincolnPuzey`_)
See the documentation changelog for more information about the release.
See the documentation changelog for more information about the release.
work_queue by queued time, not just priority. by @LincolnPuzey in #857Full Changelog: v2.1.0...v2.2.0
Fixed a bug that could cause messages to get stuck in a Worker’s in-memory prefetch queue for an indefinite amount of time. ( #850 , #857 , @LincolnPuzey )
Ensure that StubBroker.flush_all doesn’t break existing Consumers. ( #840 , #841 , @CaselIT )
Added the option use_namespace_prefix_keys to all ResultBackends . When enabled, results are stored in keys with a structured namespace prefix. Caution: Dramatiq does not implement any migration/fallback between this key format and the current format used when this option is off. See Result Key Format for more information. ( #499 , #842 , @JoaoAlmeida20 )
When using the RabbitmqBroker , detect when queues are missing, and re-create them as needed. This is implemented for both consuming (workers) and publishing messages. This is in addition to the existing behavior where queues are created on Worker startup. ( #832 , #838 , @LincolnPuzey )
Increased the maximum redis library version to v8.X ( #862 , #863 , @amureki )
Added cookbook example of a custom middleware. ( #780 , @albcunha )
Deprecate the dramatiq_group_callback_barrier_ttl environment variable by @mikeroll in #775
See the documentation changelog for more information about the release.
ConnectionError class to BrokerConnectionError by @LincolnPuzey in #835Full Changelog: v2.0.1...v2.1.0
Stopped unnecessary ImportWarning warnings being issued when importing the dramatiq.rate_limits.backends module. ( #787 , #816 , @synweap15 , #821 , #834 , @LincolnPuzey )
Added *args and **kwargs to the GenericActor.perform method. This means NotImplementedError is always raised, as intended, when this method is called but not implemented in a subclass. This can also fix type-checking errors on subclasses that implement this method. ( #805 , #837 , @LincolnPuzey )
Added a warning when using dramatiq-gevent with a free-threaded python build. Doing so is redundant because using gevent causes the GIL to be enabled. ( #811 , #815 , @synweap15 )
Increased the maximum redis library version to v7.X ( #824 , #826 , @LincolnPuzey )
Renamed the dramatiq.errors.ConnectionError exception to BrokerConnectionError , so that it doesn’t shadow the built-in exception class with the same name. The old name is still importable for backwards compatibility, and will be removed in Dramatiq v3.0.0. ( #800 , #835 , @LincolnPuzey )
Removed dependency on the watchdog_gevent library. This was previously used to ensure the --watch argument worked when starting Dramatiq with dramatiq-gevent . Our testing shows that this now works without this extra compatibility library. This change also bumps the minimum required versions of watchdog and gevent to the latest. ( #799 , @LincolnPuzey )
Improved the error message printed when the --watch argument is used without the watch extra installed. ( #798 , #836 , @LincolnPuzey )
Deprecated the dramatiq_group_callback_barrier_ttl environment variable. The new barrier_ttl argument to the GroupCallbacks middleware should be used instead. The environment variable will be removed in Dramatiq v3.0.0. ( #775 , @mikeroll )
See the documentation changelog for more information about the release.
See the documentation changelog for more information about the release.
actor decorator to work with async actors by @janek-cosmose in #796TimeoutError exception by @LincolnPuzey in #801@actor decorator and Actor class by @LincolnPuzey in #804Full Changelog: v2.0.0...v2.0.1
Fixed infinite loop when an async actor function raises a TimeoutError . ( #791 , #801 , @LincolnPuzey )
Fixed the group completed_count property to return the correct value, regardless of what order the tasks in the group finish. ( #452 , #814 , @ABolouk )
Fixed type hints of actor decorator. ( #795 , #796 , @janek-cosmose , #804 , @LincolnPuzey )
Fixed Installation page so it lists all installable extras. ( #797 , #808 , @synweap15 )
Fixed infinite loop when an async actor function raises a TimeoutError. (#791, #801, `@LincolnPuzey`_)
Fixed the |group| completed_count property to return the correct value, regardless of what order the tasks in the group finish. (#452, #814, @ABolouk)
Fixed type hints of |actor| decorator. (#795, #796, @janek-cosmose, #804, `@LincolnPuzey`_)
See the documentation changelog for more information about the release, and how to handle the breaking changes.
See the documentation changelog for more information about the release, and how to handle the breaking changes.
backend a required argument to ResultMiddleware by @LincolnPuzey in #728keys argument to incr_and_sum by @mikeroll in #772requeue_{deadline,interval} arguments by @mikeroll in #782compute_backoff implementation to respect min_backoff by @LincolnPuzey in #721after_declare_actor() hook with the correct Actor parameter instead of the Actor’s name by @jenstroeger in #743StubBroker.join() by @LincolnPuzey in #763Consumer.__next__ method by @LincolnPuzey in #777set_broker call to "Providing a list of Middleware Classes" by @karolinepauls in #723from __future__ import annotations everywhere by @LincolnPuzey in #737Full Changelog: v1.18.0...v2.0.0
Thanks to everyone who contributed to this release!
These are breaking changes we believe are most likely to effect your project.
The fail_fast argument to StubBroker.join now defaults to True. This means that calling StubBroker.join , will by default, re-raise any Exceptions that caused messages to get dead-lettered (i.e. any uncaught Exceptions in your actor functions). You may need to explicitly catch these exception in your tests (e.g. with unittest.TestCase.assertRaises() or pytest.raises() ).
Alternatively, you can revert to the old behavior by passing fail_fast_default=False to StubBroker .
However, we think the new default behavior is best, because it makes exceptions happening in your actor functions obvious in your tests. Previously, exceptions in your actor functions could pass silently, and potentially unnoticed unless you checked the side-effects of the actor. ( #739 , #758 , @LincolnPuzey )
The Prometheus middleware is no longer in the default middleware list. To keep exporting the Prometheus statistics, you must now install the prometheus extra (e.g. pip install 'dramatiq[prometheus]' ) and add the Prometheus middleware (see Customizing Middleware ). If you are not using the Promotheus statistics, no action is needed. ( #95 , #345 , #688 , @azmeuk )
The backend argument to the Results middleware is now required. Previously, not supplying this argument would result in a non-functional Results middleware. ( #728 , @LincolnPuzey )
These are changes that while technically breaking, we believe are unlikely to effect your project.
Removed URLRabbitmqBroker . This has been deprecated since version 1.1.0. Use RabbitmqBroker with url as a keyword argument instead. ( #786 , @LincolnPuzey )
Removed the dev installable extra from the project metadata. Instead the development dependencies are defined in a PEP-735 [dependency-groups] table in pyproject.toml . These can be installed in development environments with pip install --group dev . ( #766 , @LincolnPuzey )
The keys argument to RateLimiterBackend.incr_and_sum must now be a callable that returns a list of keys. This is only relevant if you have written custom code (such as a custom Rate Limiter) that uses a RateLimiterBackend . ( #741 , #772 , @mikeroll )
The deprecated requeue_deadline and requeue_interval arguments of RedisBroker have been removed. These have been deprecated and have had no effect since version 1.2.0. ( #782 , @mikeroll )
RedisBroker : The code for compatibility with pre-v1.2.0 acks has been removed. If you are using the RedisBroker , you must first upgrade Dramatiq to a version >=1.2.0, <2.0.0, and run it for some time, before upgrading to a version >=2.0.0. This is to allow Dramatiq to migrate the pre-v1.2.0 ack data structures in redis to the v1.2.0+ versions. This migration code is what has been removed in version 2.0.0. ( #771 , @mikeroll )
Fixed the way that backoff time is calculated for retries so that the first backoff is not less than min_backoff . This means that each retry backoff is now, on average, twice as long. To avoid this effect, you can halve your min_backoff (which should now be correctly observed). ( #651 , #721 , @LincolnPuzey )
Fixed the RabbitMQ broker making 1 more retry than configured when declaring queues or enqueueing messages fail due to connection errors. 1 fewer retries are now made. This fixes a regression introduced by #669 released in 1.18.0 . ( #734 , @LincolnPuzey )
When adding middleware to a Broker that already has actors declared, call the after_declare_actor middleware hook with the correct argument. ( #743 , @jenstroeger )
Made dramatiq robust against non-numeric values for the eta option. This should only be necessary when manually enqueuing messages. ( #759 , #761 , @gurelkaynak )
Fixed edge case where the StubBroker.join would try to raise None as an exception. ( #763 , @LincolnPuzey )
Add Python 3.14 to test matrix and project classifiers. ( #751 , @LincolnPuzey ) Things to be aware of when upgrading to Python 3.14:
Python 3.14 changes the default multiprocessing start method to forkserver on some platforms. Dramatiq Workers use multiprocessing and will be effected by this change. forkserver should be less bug-prone than the old default fork . However, if you run into weird issues, using the existing --use-spawn flag when starting Dramatiq to set the start method to spawn , might solve them.
The free-threaded build of Python is now officially supported by Python. Dramatiq is not yet unit-tested with free-threaded Python, but we hope to do so soon. In the meantime, if you have any success or problems running Dramatiq with free-threaded Python, we would love to hear about it.
Added type annotations for the external API of the Worker and Broker classes. ( #727 , #731 , #744 , @jenstroeger )
Added type annotations for the external API of the Middleware class and its subclasses. ( #521 , #735 , @jenstroeger )
Added message_datetime property to the Message class to retrieve message_timestamp as an aware datetime.datetime instance. ( #736 , @karolinepauls )
Added dramatiq_worker_timeout environment variable. ( #773 , @ksoviero-zengrc )
Promoted ConsumerThread and WorkerThread classes to public names, since they are used in the Middleware interface type hints. The previous names _ConsumerThread and _WorkerThread are still available for backwards compatibility. ( #760 , @synweap15 )
Increased the minimum redis-py library version to 4.0.0 . ( #738 , #764 , @LincolnPuzey )
Removed support for Python 3.9. ( #784 , @LincolnPuzey )
The project now defines a PEP-518 build backend in the pyproject.toml file. ( #750 , @LincolnPuzey )
Improved documentation relating to middleware. ( #718 , @LincolnPuzey , #723 , @karolinepauls )
Add documentation section about asyncio support. ( #595 , #719 , @LincolnPuzey )
Improved documentation about prioritizing messages with the priority argument of an actor . ( #724 , #725 , @LincolnPuzey )
Add documentation section about environment variables. ( #720 , @LincolnPuzey )
Improve documentation for before_enqueue and after_enqueue Middleware hooks. ( #753 , @karolinepauls )
fix: correct typing on signal handler by @igor47 in #664
sentry-sdk by @DHUKK in #675Full Changelog: v1.17.1...v1.18.0
Thanks to everyone who contributed to this release!
Correct typing on signal handler. ( #664 , @igor47 )
Make sure RabbitMQ Broker enqueue() attempts the correct number of preset retries. ( #668 , #669 , @jenstoeger )
Fix Message Result type variable to be covariant. ( #685 , @alecbarber )
Fix flushing of RabbitMQ queues. ( #687 , @olii )
Fixed unexpected restarts when using --watch option. ( #654 , #696 , @LincolnPuzey )
Fixed using actor decorator in the interactive shell. ( #694 , #695 , @bartvanandel )
Fix join_queue (and StubBroker ) compatibility with gevent 25.4.1. ( #699 , @synweap15 )
Close write_pipe after forking to fix hangs on Worker shutdown. ( #693 , #707 , @dansimko )
Add repr to MessageProxy class. ( #690 , @karolinepauls )
Add --worker-fork-timeout command-line argument to configure time to wait for the worker processes to come online after forking. ( #706 , @guedesfelipe )
Log a warning when added a duplicate middleware class, since this can lead to unexpected behavior. ( #709 , @synweap15 )
Extend version limit on redis-py to version 6.X. ( #711 , @dbowring )
Remove support for end-of-life Python 3.8. ( #662 , @amureki )
Add Podcatcher sponsor.
Add link to dramatiq-workflow . ( #667 , @pencil )
Update Sentry docs to reference sentry-sdk . ( #675 , @DHUKK )
Make sure RabbitMQ Broker enqueue() attempts the correct number of preset retries. (#668, #669, @jenstoeger)
Fix Message Result type variable to be covariant. (#685, @alecbarber)
Fixed unexpected restarts when using --watch option. (#654, #696, @LincolnPuzey)
Fixed using actor decorator in the interactive shell. (#694, #695, @bartvanandel)
Fix join_queue (and StubBroker) compatibility with gevent 25.4.1. (#699, `@synweap15`_)
Close write_pipe after forking to fix hangs on Worker shutdown. (#693, #707, @dansimko)
Add repr to MessageProxy class. (#690, @karolinepauls)
Add --worker-fork-timeout command-line argument to configure time to wait for the worker processes to come online after forking. (#706, @guedesfelipe)
Log a warning when added a duplicate middleware class, since this can lead to unexpected behavior. (#709, `@synweap15`_)
Extend version limit on redis-py to version 6.X. (#711, `@dbowring`_)
Remove support for end-of-life Python 3.8. (#662, `@amureki`_)
TimeLimit middleware support for Python 3.13. ( #656 , #659 , @amureki )
The Retries middleware now supports an on_retries_exhausted target actor to execute when retries on a message have been exhausted. (#630, @dbowring)
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)
Middleware hooks for after consumer & worker thread boot. ( #619 , @kamalmarhubi )
watch extras now require Watchdog version 4.0+.python_requires version in setup.py. (#606, @Niccodemus)Middleware hooks for after consumer & worker thread boot. (#619, @kamalmarhubi)
The =watch= extras now require Watchdog version 4.0+.
The python_requires version in setup.py. (#606, @niccodemus)
The result middleware now takes message options into account. (#612, @huwylphimet)
The CurrentMessage middleware now works under AsyncIO. ( #586 , #593 , @pahrohfit )
The CurrentMessage middleware now works under AsyncIO. (#586, #593, @pahrohfit)
Improved logging behavior under different buffer modes. (#596, @5tefan)
The global_broker variable is now type hinted. ( @jenstroeger )
global_broker variable is now type hinted. (@jenstroeger)The global_broker variable is now type hinted. (@jenstroeger)
Pipeline result retrieval works with non-default brokers. (#563, #564, @DiegoPomares)
Asyncio support. (#536, @caspervdw)
Restored namedtuple instance methods on Message.
namedtuple instance methods on Message. (#538)Added missing py.typed file to distributions.
Note: this version was released on 2023-02-05. I am just now backfilling a GitHub Release for it.
Note: this version was released on 2023-02-05. I am just now backfilling a GitHub Release for it.
Note: this version was released on 2022-04-02. I am just now backfilling a GitHub Release for it.
Note: this version was released on 2022-04-02. I am just now backfilling a GitHub Release for it.
A race condition in the Redis broker's join method. (#480, #481, @CaselIT)
Skipped messages and messages failed due to |AgeLimit| now store results more consistently. (#440, #449, `@FinnLidbetter`_)
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)
An issue where signals remained blocked after worker process boot. (#465, #466, @FinnLidbetter)
An issue where stopping the process too quickly after boot could lead to an AttributeError. (#463, #464, @FinnLidbetter)
AttributeError. (#463, #464, @FinnLidbetter)Actors and messages can now specify 0 backoff. (@FinnLidbetter, #438)
RabbitMQ messages now have a redelivered flag. (#405, @nffdiogosilva)
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)
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)
Async exceptions now correctly set the thread id on Python 3.7 and up. (#419, #420, @FinnLidbetter)
dramatiq.Message.decode now raises a dramatiq.DecodeError on exception. (#375, @thomazthz)
dramatiq.Message.decode now raises a dramatiq.DecodeError on exception. (#375, @thomazthz)RabbitMQ broker now correctly closes it and its associated channel (if any) before removing it from the broker. (#381, #384)The RabbitMQ broker dead message TTL can now be configured via the dramatiq_dead_message_ttl environment variable. (#354, @evstratbg)
dramatiq_dead_message_ttl environment variable. (#354, @evstratbg)--worker-shutdown-timeout flag. (#330, @mic47)--watch flag is set on unsupported platforms. (#326, #328, @CaselIT)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)
The CLI raises an error when the --watch flag is set on unsupported platforms. (#326, #328, @CaselIT)
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)
A custom Redis connection can now be passed to the Redis broker via the new client keyword argument. (#274, @davidt99)
fileno has been added to StreamablePipe. (#291, @takhs91)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 silent Retries. (#295)
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)
An issue where an IndexError would be raised when multiple middleware containing fork functions were defined.
IndexError would be raised when multiple middleware containing fork functions were defined. (#271)An issue where an IndexError would be raised when multiple middlewre containing fork functions were defined. ( #271 )
Support for forking and running arbitrary functions (so-called “fork functions”). (#127, #230)
--fork-function flag.--skip-logging flag. (#263, @whalesalad)Support for forking and running arbitrary functions (so-called “fork functions”). ( #127 , #230 )
The --fork-function flag.
The --skip-logging flag. ( #263 , @whalesalad )
An issue where the max_age parameter to AgeLimit 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 its flush_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 )
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 )
Generic actors can now be passed custom actor registries. (#223, @jonathanlintott)
--use-spawn command line argument. (#227, #228, @jrusso1020)Generic actors can now be passed custom actor registires. (#223, @jonathanlintott)
--use-spawn command line argument. (#227, #228, @jrusso1020)
RabbitmqBroker now supports multiple connection uris to be passed in via its url parameter. (#216, @wsantos)
RabbitmqBroker now supports multiple connection uris to be passed in via its url parameter. (#216, @wsantos)dramatiq_queue_prefetch environment variable to control the number of messages to prefetch per worker thread. (#183, #184, @xelhark)
dramatiq_queue_prefetch environment variable to control the number of messages to prefetch per worker thread. (#183, #184, @xelhark)StubBroker. (#195, #203)CurrentMessage. (#208)>1.0,<2.0. (#202)pipe_ignore has been fixed to apply to the next message in line within a pipeline. (#194, @metheoryt)dramatiq_queue_prefetch environment variable to control the number of messages to prefetch per worker process. (#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)
Pinned pika version >1.0,<2.0. (#202)
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)
The RabbitMQ broker now supports native message priorities. (#157, @davidt99)
@actor. (#169, @gilbsgilbs)The RabbitMQ broker now supports native message priorities. (#157, @davidt99)
Support for specifying the actor class to |actor|. (#169, @gilbsgilbs)
Pika 0.13 is now required.
Changed license classifier to the correct license. This is why you shouldn't publish changed before you've had coffee, folks!
Support for redis-py 3.x. (#142, @maerteijn)
cli.main now takes an optional argument namespace so that users may define their own entrypoints. ([#140], [@maerteijn])
This is a big one!
cli.main now takes an optional argument namespace so that users
may define their own entrypoints. (#140, @maerteijn)DEBUG level instead of INFO level. This
improves throughput and makes logging much less verbose.TimeLimit middleware no longer uses signals to trigger time
limit handling. Instead it uses a background thread per worker
process.Upgraded prometheus_client to 0.2.x.
interrupt method on Broker and its usages within Worker have been dropped.Support for worker heartbeats to RedisBroker.
RedisBroker.maintenance_chance and heartbeat_timeout parameters to
RedisBroker.Interrupt base class for thread-interrupting exceptions. (@rpkilby)ShutdownNotifications middleware. (@rpkilby)TimeLimitExceeded is now a subclass of Interrupt.StubBroker.join and Worker.join are now more reliable.Prometheus middleware no longer wipes the prometheus data
directory on startup. This fixes an issue with exporting
application metrics along with worker metrics.Support for worker heartbeats to RedisBroker .
maintenance_chance and heartbeat_timeout parameters to RedisBroker .
Interrupt base class for thread-interrupting exceptions. ( @rpkilby )
ShutdownNotifications middleware. ( @rpkilby )
TimeLimitExceeded is now a subclass of Interrupt .
StubBroker.join and Worker.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.
requeue_{deadline,interval} parameters to RedisBroker . These two parameters no longer have any effect.
- URLRabbitmqBroker is deprecated. The RabbitmqBroker takes a url parameter so use that instead. URLRabbitmqBroker will be removed in version 2.0.
confirm_delivery parameter to RabbitmqBroker .
dead_message_ttl , requeue_deadline and requeue_interval parameters to RedisBroker .
url parameter to Redis rate limiter backend.
url parameter to Redis result backend.
timeout parameter to all the brokers’ join methods. ( #57 )
flush and flush_all methods to RedisBroker . ( #62 )
flush and flush_all methods to RabbitmqBroker . ( #62 )
Cleaned up command line argument descriptions.
URLRabbitmqBroker is deprecated. The RabbitmqBroker takes a url parameter so use that instead. URLRabbitmqBroker will be removed in version 2.0.
rabbitmq and watch 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 with python -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 )
- --log-file command line argument. ( #43 , @najamansari )
--log-file command line argument. ( #43 , @najamansari )
--pid-file command line argument. ( #43 , @najamansari )
Dramatiq is now licensed under the LGPL.
Passing time_limit in send_with_options . ( #44 )
--log-file command line argument. (#43, @najamansari)
--pid-file command line argument. (#43, @najamansari)
Dramatiq is now licensed under the LGPL.
Passing time_limit in send_with_options. (#44)
- Unhandled errors within workers now print the full stack trace.
--queues CLI argument. ( #35 )
Unhandled errors within workers now print the full stack trace. ( #42 )
--queues CLI argument. (#35)
Unhandled errors within workers now print the full stack trace. (#42)
- Calling str on actor . ( #40 , @aequitas )
Calling str on actor . ( #40 , @aequitas )
- retry_when parameter to Retries .
group and pipeline .
retry_when parameter to Retries .
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.
- pip install dramatiq[all] installs all deps.
pip install dramatiq[all] installs all deps.
--path command line argument. ( #27 )
pip install dramatiq now installs RabbitMQ and watch deps.
- Pinned pika version 0.11 to avoid an issue where passing heartbeat to RabbitmqBroker in get_broker would raise a TypeError . ( #23 , @chen2aaron )
Callbacks middleware.
asdict method to Messages .
Pinned pika version 0.11 to avoid an issue where passing heartbeat to RabbitmqBroker in get_broker would raise a TypeError . ( #23 , @chen2aaron )
- Messages now support pluggable Encoders .
long_running example.
scheduling example.
Messages now support pluggable Encoders .
ResultBackends now support pluggable Encoders .
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.
TimeLimit middleware now uses a monotonic clock.
- Autoreload now works under gevent.
Autoreload now works under gevent.
- pool parameter to the Memcached rate limiter backend.
Support for Results .
pool parameter to the Memcached rate limiter backend.
client parameter to the Redis rate limiter backend.
--watch-use-polling command line argument.
Fixed bad file descriptor issue during RMQ broker shutdown under gevent.
Support for |Results|.
pool parameter to the |MemcachedRLBackend| rate limiter backend.
client parameter to the |RedisRLBackend| rate limiter backend.
--watch-use-polling command line argument.
Fixed bad file descriptor issue during RMQ broker shutdown under gevent.
- Logging statements before and after an actor is called.
dramatiq.Actor.logger .
Logging statements before and after an actor is called.
class-based actors behave more like normal Python classes now. ( #15 )
dramatiq.Actor.logger.
Logging statements before and after an actor is called.
|GenericActors| behave more like normal Python classes now. (#15)
- Connection and import errors that occur during process boot now log stack traces ( @rakanalh ).
Connection and import errors that occur during process boot now log stack traces ( @rakanalh ).
Added support for Python 3.5 ( #7 by @jssuzanne ).
- Support for class-based actors ( #9 ).
Support for class-based actors ( #9 ).
- An AssertionError after starting the consumer if RabbitMQ is not running ( #10 ).
An AssertionError after starting the consumer if RabbitMQ is not running ( #10 ).
- Worker.pause and Worker.resume .
Worker.pause and Worker.resume .
url parameter to RedisBroker .
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 ).
- SkipMessage middleware error.
SkipMessage middleware error.
after_skip_message middleware hook.
join now takes optional min_successes and idle_time parameters.
Consumer reconnect backoff factor has been lowered from 10s to 100ms.
URLRabbitmqBroker is now a factory function that creates instances of RabbitmqBroker .
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.
- pika is now pinned to >=0.10,<0.12 .
pika is now pinned to >=0.10,<0.12 .
- StubBroker.flush_all now flushes delay queues.
More benchmarks.
StubBroker.flush_all now flushes delay queues.
- URLRabbitmqbroker ( @whalesalad ).
URLRabbitmqbroker ( @whalesalad ).
StubBroker StubBroker.flush and StubBroker.flush_all .
before_consumer_thread_shutdown middleware hook.
before_worker_thread_shutdown middleware hook.
Implementation of the window rate limiter has been streamlined.
Redis requeue is now more efficient.
RabbitMQ enqueue is now resilient to disconnects.
dramatiq-gevent packaging ( @bendemaree ).
- Messages are no longer assigned new ids when they are re-enqueued. This makes tracking messages using middleware significantly easier.
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.
- RabbitmqBroker no longer takes a ConnectionParameters param as input. Instead, it builds one based on kwargs.
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.
- Lua files are now properly distributed with the package.
Lua files are now properly distributed with the package.
- Reworked scheduled messages to improve fairness. Messages are now re-enqueued on the broker once they hit their eta.
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 version 0.0.20 .
- before and after arguments to add_middleware .
before and after arguments to add_middleware .
Support for RateLimiters .
- Changed the default max retries value from None to 20 , meaning tasks are now retried for up to about 30 days before they’re dead-lettered by defaul
Changed the default max retries value from None to 20 , meaning tasks are now retried for up to about 30 days before they’re dead-lettered by default.
- Dropped RabbitMQ heartbeat to avoid spurious disconnects.
Dropped RabbitMQ heartbeat to avoid spurious disconnects.
- Added dramatiq-gevent script.
Added dramatiq-gevent script.
Capped prefetch counts to 65k.
Installation
Motivation
User Guide
Best Practices
Troubleshooting
Advanced Topics
Cookbook
API Reference
Source Code
Changelog
PyPI
Contributing
Discussion Board
Project License
Franz — Desktop Client for Apache Kafka
Podcatcher — iOS Podcast Player
©2017, 2018, 2019 CLEARTYPE SRL.
| Powered by Sphinx 8.1.3 & Alabaster 1.0.0 | Page source
Added dramatiq-gevent script.
Capped prefetch counts to 65k.
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →