Decription
About
Radical is a RPC library that allows you to have cross-service communication out of the box.
It can serve as a replacement for Celery.
Radical has out-of-the-box integration with Django and also supports asyncio, but can be used without it.
Radical is easily extensible with custom transports and serializers.
Available transports:
- Redis
- Postgres
Default and recommended transport is Redis.
Available serializers:
- JSON
- Pickle
Default and recommended serializer is Pickle.
Glossary
Term | Meaning |
---|---|
Service | A fully autonomous application written with Django, Sanic or vanilla Python. |
Transport | Module that provides interface to actual network communication: for example, a Redis transport. |
Serializer | Module that provides interface to data serialization and deserialization. |
Quick start
Installing
pip install radical-rpc
Using with Django
Add Radical to INSTALLED_APPS:
INSTALLED_APPS = [ # ... 'radical', # ... ]
Configure Radical:
RADICAL_CONFIG = { 'TRANSPORT_URL': 'redis://redis:6379/0?request_timeout=10', 'QUEUE_NAME': 'myapp', 'MODULES': [ 'radical.demo' ] }
Call it anywhere:
from radical.contrib.django import call_wait, call from django.http import JsonResponse def some_view(request): # Call remote method and wait for it to return result. result = call_wait('myapp', 'radical.demo.add', 1300, 37) return JsonResponse(dict(result=result)) # Returns {'result': 1337} def some_view(request): # Call remote method and do not wait for it to finish. call('myapp', 'radical.demo.add', 1300, 37) return JsonResponse(dict(result='Job was scheduled.'))
Start Radical worker:
./manage.py radical