Как вернуть ответ до того, как задание выполнено? - PullRequest
0 голосов
/ 20 марта 2020

Я пытаюсь понять веб-серверы на python.

У меня есть простой API:

from my_module import some_func
from aiohttp import web
from multiprocessing import Process, Queue


add_route = web.RouteTableDef()
queue = Queue()
all_tasks = []

@add_route.post('/add_task')
async def add_task(request):
    task = Process(target=some_func, args=(request.json()))
    all_tasks.append(task)
    for task in all_tasks:
        queue.put(task)

        ...
        ...

    return web.json_response({'response': f'Task {task.id} was created'})

@add_route.get('/get_task')
async def task_status(request):
    task_id = request.rel_url.query['task_id']
    status = queue.get_task_status(task_id) # some magic nonexistent method
    return web.json_response({task_id: status})

Но я не знаю, что делать. Все, что я хочу, это добавить задачу в очередь и сразу же получить ответ

{
  "response": "Task '1123' was created"
}

и после получения статуса задачи с запросом на /get_task:

{
  "324": "In progress"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...