Я пытаюсь обновить приложение Slack для своей компании, которое запросит наш API, выполнит несколько вычислений и выложит хороший отчет. Проблема в том, что запуск отчета занимает около 7-10 секунд, а Slack допускает тайм-аут только 3000 мс для команды слэша.
Это не большая проблема, потому что вы можете сразу же ответить сообщением, подтверждающим команду, а затем, когда отчет завершится, ответить снова.
Остальная часть нашего приложения Slack написана с бэкэндом Flask и размещена на сервере Ubuntu 16.04, поэтому мы запускаем Python 3.5.
Код, который я нашел , который демонстрирует, как делать то, что я хочу, использует библиотеку Zappa, которая выглядит как для lamdba AWS, использует декоратор @task
, чтобы заставить функцию быть асинхронной. К сожалению, он работает не на Python 3.6.
Пример кода из учебника:
@task
def hello_there_task(response_url):
sleep(5)
data = {
'response_type': 'in_channel',
'text': 'You _are_ a bold one.',
}
requests.post(response_url, json=data)
@app.route('/hello-there', methods=['POST'])
def hello_there():
if not is_request_valid(request):
abort(400)
hello_there_task(request.form['response_url'])
return jsonify(
response_type='in_channel',
text='<https://youtu.be/frszEJb0aOo|General Kenobi!>',
)
Мой вопрос: как я могу сделать hello_there_task
асинхронным в Python 3.5? Это не должен быть декоратор, хотя это не повредит для будущего использования.