Celery v0.8.1 (stable) documentation
If you need to call into another language, framework or similar, you can do so by using HTTP tasks.
The HTTP tasks (or REST task) uses a simple REST+JSON scheme to take arguments and return results, the scheme to call a task is:
GET http://example.com/mytask/?arg1=a,arg2=b,arg3=c
The web page should then return a response in the following format if the execution was successful:
{"status": "success", "retval": ....}
or in the following format if there was an error:
{"status": "failure": "reason": "Invalid moon alignment."}
With this information we can define a simple task in Django:
from django.http import HttpResponse
from anyjson import serialize
def multiply(request):
x = int(request.GET["x"])
y = int(request.GET["y"])
result = x * y
response = {"status": "success", "retval": result}
return HttpResponse(serialize(response), mimetype="application/json")
I’m sure you’ll be able to port this scheme to any language/framework. New examples and libraries are very welcome!
To execute the task you use celery.task.rest.RESTProxyTask:
>>> from celery.task import RESTProxyTask
>>> res = RESTProxyTask.delay("http://example.com/multiply", x=10, y=10)
>>> res.get()
100
In your celeryd.log file you should see the task being processed:
[INFO/MainProcess] Task celery.task.rest.RESTProxyTask
[f2cc8efc-2a14-40cd-85ad-f1c77c94beeb] processed: 100
Since applying tasks can also simply be done via the web and the celery.views.apply view, executing tasks from other languages should be a no-brainer.