A Publish and Subscribe library for Celery
Project description
celery-pubsub 2.0.0-beta3
Publish and Subscribe with Celery
Supported dependencies
Python | Celery 3 | Celery 4 | Celery 5 |
---|---|---|---|
3.7 | |||
3.8 | |||
3.9 | |||
3.10 | |||
3.11 | |||
pypy 3.8 | |||
pypy 3.9 |
Basic usage
import celery
import celery_pubsub
@celery.task
def my_task_1(*args, **kwargs):
return "task 1 done"
@celery.task
def my_task_2(*args, **kwargs):
return "task 2 done"
# First, let's subscribe
celery_pubsub.subscribe('some.topic', my_task_1)
celery_pubsub.subscribe('some.topic', my_task_2)
# Now, let's publish something
res = celery_pubsub.publish('some.topic', data='something', value=42)
# We can get the results if we want to (and if the tasks returned something)
# But in pub/sub, usually, there's no result.
print(res.get())
# This will get nowhere, as no task subscribed to this topic
res = celery_pubsub.publish('nowhere', data='something else', value=23)
Advanced usage
Wildcards can be used in topic names:
-
*
matches any one groupsome.*.test
will matchsome.awesome.test
,some.random.test
but notsome.pretty.cool.test
,elsewhere
orhere.some.up.test
some.*
will matchsome.test
andsome.thing
but it won't matchsome
orsome.testy.test
-
#
matches any number of groupssome.#.test
will matchsome.awesome.test
,some.random.test
,some.pretty.cool.test
but notelsewhere
orhere.some.up.test
some.#
will match anything that starts withsome.
, such assome.very.specific.topic.indeed
#
will match anything
# Let's subscribe
celery_pubsub.subscribe('some.*', my_task_1)
celery_pubsub.subscribe('some.*.test', my_task_2)
celery_pubsub.subscribe('some.#', my_task_3)
celery_pubsub.subscribe('#', my_task_4)
celery_pubsub.subscribe('some.beep', my_task_5)
# it's okay to have more than one task on the same topic
celery_pubsub.subscribe('some.beep', my_task_6)
# Let's publish
celery_pubsub.publish('nowhere', 4) # task 4 only
celery_pubsub.publish('some', 8) # task 4 only
celery_pubsub.publish('some.thing', 15) # tasks 1, 3 and 4
celery_pubsub.publish('some.true.test', 16) # tasks 2, 3 and 4
celery_pubsub.publish('some.beep', 23) # tasks 1, 3, 4, 5 and 6
celery_pubsub.publish('some.very.good.test', 42) # tasks 3 and 4
# And if you want to publish synchronously:
celery_pubsub.publish_now('some.very.good.test', 42) # tasks 3 and 4
# You can unsubscribe too
celery_pubsub.unsubscribe('#', my_task_4)
# Now, task 4 will not be called anymore
celery_pubsub.publish('some.very.good.test', 42) # task 3 only
Changelog
- 2.0.0
- Drop support for CPython 2.7, 3.4, 3.5, 3.6
- Drop support for Pypy 2.7 and 3.6.
- Add support for Pypy 3.8 and 3.9.
- Add support for CPython 3.11.
- Type hints are now directly in the code. No more stubs files.
- 1.0.2
- Add stubs file for type hinting.
- 1.0.1
- Changed
README.rst
toREADME.md
. - Added better badges to show the supported status for each Celery & Python version.
- Changed
- 1.0.0
- Flexible requirements (no more pinned). Better to support a wide range of environments.
- Changed test framework from nose to pytest.
- Flake8
- Support for Python 3.9 and 3.10.
- 0.2.1
- Performance: Internally uses a
set
to store the subscribed tasks. - Updated Codeclimate as the
old reporter <https://github.com/codeclimate/python-test-reporter>
_ is deprecated. - Pinned requirements' dependency versions.
- celery 4.3.0 -> 4.4.0
- kombu 4.6.4 -> 4.6.7
- billiard 3.6.1.0 -> 3.6.2.0
- codeclimate-test-reporter 0.2.3 -> removed!
- Performance: Internally uses a
- 0.2.0
- Removed Python 3.4 support. Reason: no longer supported by Kombu 4.6+.
- Officially supported by Python 3.8.
- Pinned requirements' dependency versions.
- celery 4.2.1 -> 4.3.0
- kombu 4.2.1 -> 4.6.4
- billiard 3.5.0.4 -> 3.6.1.0
- vine 1.1.4 -> 1.3.0
- 0.1.9
- Added Python 3.4, 3.5, 3.7, and multiple branches of pypy
- Pinned requirements' dependency versions.
- celery 4.1.0 -> 4.2.1
- kombu 4.1.0 -> 4.2.1
- billiard 3.5.0 -> 3.5.0.4
- nose pinned to 1.3.7
- coverage pinned to 4.3.4 (was already 4.3.4 but fuzzy)
- codeclimate-test-reported pinned to 0.2.3
- Extra badge to show the number of downloads (thanks to PePy)
- 0.1.8
- Fixup for broken
pip install celery_pubsub==0.1.7
- Fixup for broken
- 0.1.7
- PyPI long description fixed
- Removed README.md and fixed README.rst
- Added command
python setup.py test
to run unit tests with coverage - pypy support
- 0.1.5
- Python 3 support
- 0.1.1
- Added README
- Refined setup
- No need to access celery_pubsub.pubsub anymore. Direct access in celery_pubsub.
- Tests moved out of package
- Added Travis for CI
- 0.1
- Initial version
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
celery-pubsub-2.0.0b3.tar.gz
(7.7 kB
view details)
Built Distribution
File details
Details for the file celery-pubsub-2.0.0b3.tar.gz
.
File metadata
- Download URL: celery-pubsub-2.0.0b3.tar.gz
- Upload date:
- Size: 7.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | f4cdd3fee83384ee0250eaf698b746d21e73cf3e52bcdfd0e95ccd78ffc12d86 |
|
MD5 | 97da95a0c4bd0869cd944a23d8d2dd61 |
|
BLAKE2b-256 | ade669b515bf82316cfa3b4a8a5051c95b4c31ae85b1db7f9a7c5ccc7b92b384 |
File details
Details for the file celery_pubsub-2.0.0b3-py3-none-any.whl
.
File metadata
- Download URL: celery_pubsub-2.0.0b3-py3-none-any.whl
- Upload date:
- Size: 6.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8676fd37cbae5b9f57909efb971a4c617c423b9d05d95c88759dafdd7663802d |
|
MD5 | ec68db6b4d9ae357972b303eaac2204e |
|
BLAKE2b-256 | 9a3fb622d18bb4be2f053387c39a405ffcfdb9a0f2c55090ad3ec4ea6280aa65 |