- Optimize the task querying on Postgres backend
- Fix: ensure that there are no name colissions between concrete instances of different dynamic tasks
- Improve fairness of polling tasks under high contention.
- Added PostgreSQL backend
- Added Sqlite backend and made it the default (replacing InMemoryRepository)
- Refactored test suite to cover all conformance/integration tests on all backends
- Refactored Redis backend, simplifying the Lua scripts and improving exceptional case handling (e.g. tasks disappearing between query and poll)
- Main loop only sleeps for the rest of remaining poll_interval before next tick instead of the full amount
- General bug fixes, documentation changes, clean up
- Fixes bug where a locked dynamic task could be executed again on next tick.
- poll_task is now reentrant with regards to locking. If the lease passed in matches the lease on the task, it behaves as though it were unlocked.
- Middleware support and optional metrics via Prometheus
- Improved the graceful shutdown behavior
- Task instance and application context are now available in the task context
- Breaking change: dynamic task parameters are now accessed via context.args[‘name’] instead of context.name
- Improved examples, documentation and packaging
- Timezone support
- More efficient poling when Redis backend is used
- First release that actually works.
- First release on PyPI.