HTTP¶
To start http interface you have two options.
Built-in simple http server:
$ dsq http -t tasks
Or use external server with dsq.wsgi
app:
$ DSQ_TASKS=tasks uwsgi --http-socket :9042 -w dsq.wsgi
HTTP interface supports application/x-msgpack
and application/json
types
in Content-Type
and Accept
headers.
Example tasks.py:
# tasks.py
import logging
import dsq
logging.basicConfig(level=logging.INFO)
manager = dsq.create_manager()
@manager.task(queue='normal')
def div(a, b):
return a/b
Push tasks¶
Use POST /push
with body in json or msgpack with appropriate
Content-Type
:
# Request
POST /push
{
"queue": "normal",
"name": "div",
"args": [10, 2],
"keep_result": 600
}
# Response
{
"id": "Uy3buqMTRzOfBXdQ5v4eQA"
}
Note
Body fields are the same as for Manager.push
.
Getting result¶
GET /result
can be used to retrieve task result if keep_result
was
used:
# Request
GET /result?id=Uy3buqMTRzOfBXdQ5v4eQA
# Response
{
"result": 5
}
Error result¶
Error can be returned in case of exception:
# Push request
POST /push
{
"queue": "normal",
"name": "div",
"args": [10, 0],
"keep_result": 600
}
# Result request
GET /result?id=0Zukd-zyTCC3qUoJ-Pf14Q
# Result response
{
"error": "ZeroDivisionError",
"message": "integer division or modulo by zero",
"trace": "Traceback (most recent call last):\n File \"/home/bobrov/work/dsq/dsq/manager.py\", line 241, in process\n result = func(*args, **kwargs)\n File \"./tasks.py\", line 10, in div\n return a/b\nZeroDivisionError: integer division or modulo by zero\n"
}