Отправить 200 OK сразу при получении запроса

Пишу бота для вконтакте на Django(2.2.4), с библиотекой vk_api

Некоторые из функций достаточно долгие (выполняются за 5-7 секунд). Но вконтакте требует, чтобы сервер отвечал не дольше 3 секунд. Если ответ задерживается, запрос отправляется повторно, и бот спустя некоторое время начинает отправлять одинаковое сообщение много раз. (Использую Callback Api)

Возможно ли решить эту проблему без серьезных изменений в коде?

@csrf_exempt
def MainBotView(request):
    # Нужно чтобы ok отправился здесь

    #... много кода ...

    return HttpResponse('ok')

( Если имеет значение, бот работает на pythonanywhere )


Ответы (1 шт):

Автор решения: miriskrit

Всем спасибо, проблему удалось решить без асинхронности и потоков. Может быть это решение поможет тем, кто столкнулся с такой проблемой.

Теперь бот будет просто игнорировать повторные события. Не самый лучший костыль, но при первых тестированиях дал нужный результат.

Бот записывает последний ответ. Если приходит 2 раза подряд одинаковый запрос на обработку фото, то сразу возвращается OK. Каждые 30 секунд очередь очищается.

(Нагрузка на бота 10-20 подобных сообщений в день, думаю при таких условиях подобное решеие уместно)

LastRequestList = []
...

obj = data["object"]
peer_id = obj["peer_id"]
body = obj["text"]
for item in LastRequestList:
    if item[2] - time.time() > 30:
       LastRequestList.remove(item)
    if item[0] == peer_id and item[1] == body:
       LastRequestList.remove(item)
       return HttpResponse('ok')
    if body.upper().find('ФОТО') != -1:
       LastRequestList.append((peer_id, body, time.time()))
→ Ссылка