Запрос FastAPI с телом изображения base64 занимает слишком много времени, чтобы получить ответ

Ниже API потребовалось слишком много времени, чтобы ответить (более 1 минуты), но оператор печати print(len(doc)) печатается мгновенно.

# pip install fastapi
# fastapi dev main.py
from fastapi import FastAPI
from typing import Any, Dict
app = FastAPI()

@app.post("/fast")
async def root(data:Dict[Any,Any]):
    doc = data['doc']
    print(len(doc)) # 1459305
    return {"success":len(doc)}

тело запроса:

{"doc":"JVBERi0xLjMgCjEgMCBvYmoKPDwK..<-- 1459305 total chars-- >.Tk2MzU1NTM4OTY4NGIzYTBlNjIwZjA+XQo+PgpzdGFydHhyZWYKMTA5MzMzNQolJUVPRgo = "

Я ожидаю ответа очень быстро

Проблема, с которой вы столкнулись, скорее всего, связана с этим ответом . Кстати, если не требуется иное, наиболее подходящим способом загрузки изображений/файлов будет кодирование их как multipart/form-data, а не base64. Пожалуйста, посмотрите этот ответ , этот ответ , а также этот , этот и этот

Chris 03.06.2024 11:42
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
64
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

запрос выполняется медленно, потому что я запускаю его в FastAPI — Swagger UI (http://localhost:8000/docs).

Ответ быстрый, когда я бегу по почте, чувак.

вы также можете отключить ответ на завиток: https://github.com/tiangolo/fastapi/discussions/3853

import json
from typing import Optional, Dict, Any

from fastapi import FastAPI
from fastapi.encoders import jsonable_encoder
from starlette.responses import HTMLResponse
from fastapi.staticfiles import StaticFiles

app = FastAPI(docs_url=None, redoc_url=None)

app.mount("/static", StaticFiles(directory = "static"), name = "static")


def get_swagger_ui_html(
    *,
    openapi_url: str,
    title: str,
    swagger_js_url: str = "https://cdn.jsdelivr.net/npm/swagger-ui-dist@3/swagger-ui-bundle.js",
    swagger_css_url: str = "https://cdn.jsdelivr.net/npm/swagger-ui-dist@3/swagger-ui.css",
    swagger_favicon_url: str = "https://fastapi.tiangolo.com/img/favicon.png",
    oauth2_redirect_url: Optional[str] = None,
    init_oauth: Optional[Dict[str, Any]] = None,
) -> HTMLResponse:

    html = f"""
    <!DOCTYPE html>
    <html>
    <head>
    <link type = "text/css" rel = "stylesheet" href = "{swagger_css_url}">
    <link rel = "shortcut icon" href = "{swagger_favicon_url}">
    <title>{title}</title>
    </head>
    <body>
    <div id = "swagger-ui">
    </div>
    <script src = "{swagger_js_url}"></script>
    <!-- `SwaggerUIBundle` is now available on the page -->
    <script>
    const HideCurlPlugin = () => {{
        return {{
            wrapComponents: {{
                curl: () => () => null
            }}
        }}
    }}
    const ui = SwaggerUIBundle({{
        url: '{openapi_url}',
        plugins: [
            HideCurlPlugin
        ],
    """

    if oauth2_redirect_url:
        html += f"oauth2RedirectUrl: window.location.origin + '{oauth2_redirect_url}',"

    html += """
        dom_id: '#swagger-ui',
        presets: [
        SwaggerUIBundle.presets.apis,
        SwaggerUIBundle.SwaggerUIStandalonePreset
        ],
        layout: "BaseLayout",
        deepLinking: true,
        showExtensions: true,
        showCommonExtensions: true
    })"""

    if init_oauth:
        html += f"""
        ui.initOAuth({json.dumps(jsonable_encoder(init_oauth))})
        """

    html += """
    </script>
    </body>
    </html>
    """
    return HTMLResponse(html)


@app.get("/docs", include_in_schema=False)
async def custom_swagger_ui_html():
    return get_swagger_ui_html(
        openapi_url=app.openapi_url,
        title=app.title + " - Swagger UI",
        oauth2_redirect_url=app.swagger_ui_oauth2_redirect_url,
        swagger_js_url = "/static/swagger-ui-bundle.js",
        swagger_css_url = "/static/swagger-ui.css",
    )


@app.get("/users/{username}")
async def read_user(username: str):
    return {"message": f"Hello {username}"}

Другие вопросы по теме