A Publish and Subscribe library for Celery
Project description
celery-pubsub 1.0.2
Publish and Subscribe with Celery
Supported dependencies
Python | Celery 3 | Celery 4 | Celery 5 |
---|---|---|---|
2.7 | |||
3.5 | |||
3.6 | |||
3.7 | |||
3.8 | |||
3.9 | |||
3.10 | |||
pypy 2.7 | |||
pypy 3.6 |
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
- 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
Built Distribution
File details
Details for the file celery-pubsub-1.0.2rc0.tar.gz
.
File metadata
- Download URL: celery-pubsub-1.0.2rc0.tar.gz
- Upload date:
- Size: 7.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.10.9
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a2e8887273ffcf97ef7b43ee69f124a17d376a8d2a25339fc57801019326ad55 |
|
MD5 | 1095116f7581ae3c053b373ea70561c8 |
|
BLAKE2b-256 | 496f2fab1031f6ca9231643570a4d9b6f7905b780d92d9949597b92dc482ee5e |
File details
Details for the file celery_pubsub-1.0.2rc0-py3-none-any.whl
.
File metadata
- Download URL: celery_pubsub-1.0.2rc0-py3-none-any.whl
- Upload date:
- Size: 5.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.10.9
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a098ee3791ef6224ef0704b1eefaea6a16aba854232b4b787ae75947ab08334f |
|
MD5 | 1d9e303659b4d0025f8826495dcb6162 |
|
BLAKE2b-256 | a7ca0013f1babfceb984b25b41a1da6954ec72371a3ab3f79ecb243ba4d4afe0 |