2016-11-23 2 views
0

Я хочу, чтобы реагировать на пользователь, как только я получил запрос, а затем продолжить, чтобы сохранить данные в базу данныхОтветить пользователь и продолжать работать функции асинхронного

async def index(request): 
    data = await request.post() 
    response.write("done") 
    async with request.app.mysqlpool.acquire() as conn: 
     async with conn.cursor() as cur: 
      await cur.execute("INSERT INTO ...") 

Если я пытаюсь обернуть часть после запроса. пишите в отдельную функцию и вызывайте ее с помощью run_in_executor - она ​​не позволяет ожидать ожидаемые функции внутри (TypeError: сопрограммы не могут использоваться с run_in_executor())

Есть ли способ сделать это в aiohttp?

ответ

1

Push await response.drain() сразу после response.write(...) call.

Он точно не гарантирует, что данные отправляются через провод, но это самое близкое решение.

+0

В конце я сделал это так: body = json.dumps ({"status": "success"}). Encode ("utf8") resp = web.StreamResponse (headers = { "content-type «: "приложения/JSON", "Content-Length": ул (Len (тело)), }) ждут resp.prepare (self.request) resp.write (тело) ждут resp.drain() Ожидание resp.write_eof() – offline15

Смежные вопросы