Обслуживать один HTTP-запрос без блокировки - PullRequest
0 голосов
/ 24 января 2020

Я пишу скрипт, который включает в себя открытие HTTP-сервера и обслуживание одного файла. Тем не менее, запрос на этот файл также инициируется из дальнейшего сценария. В настоящее время я делаю это так:

Handler = SimpleHTTPServer.SimpleHTTPRequestHandler
httpd = SocketServer.TCPServer(("", 8000), Handler)
Thread(target=httpd.handle_request).start()

Это работает для обработки одного запроса, но также создает некоторые проблемы с вводом с клавиатуры. Каков наиболее эффективный и неблокирующий способ обслуживания одного HTTP-запроса? В идеале сервер должен закрыть и освободить порт после завершения запроса.

1 Ответ

1 голос
/ 24 января 2020

Вы можете попробовать много обходных путей, но flask - это путь к go. Это не самое простое и быстрое решение, но оно наиболее надежное.

Пример для обслуживания одного файла с flask:

from flask import Flask, send_file
app = Flask(__name__)

@app.route('/file-downloads/')
def file_downloads():
    try:
        return render_template('downloads.html')
    except Exception as e:
        return str(e)

app.run()

для неблокирующего решения, которое вы можете сделать это вместо app.run():

Thread(target=app.run).start()

Но я не рекомендую запускать приложение flask в потоке из-за GIL

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