首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FastAPI处理请求超时

FastAPI处理请求超时
EN

Stack Overflow用户
提问于 2022-05-24 19:57:11
回答 2查看 1.3K关注 0票数 0

我有一个API端点,在这个端点中,我试图处理csv文件,并在刮取完成后将它传递给刮取函数--我正在下载由刮刀函数生成的csv文件,所有这些都如我所期望的那样起作用,但当我上传csv文件几秒钟后将它部署到heroku时,它会出现503个响应,这意味着请求超时。因此,我想问一下,如何正确地处理请求超时错误,在刮板运行和文件下载之前,它不会崩溃和运行。

代码语言:javascript
复制
import fastapi as _fastapi
from fastapi.responses import HTMLResponse, FileResponse
import shutil
import os

from scraper import run_scraper


app = _fastapi.FastAPI()


@app.get("/")
def index():
    content = """
<body>
<form method="post" action="/api/v1/scraped_csv" enctype="multipart/form-data">
<input name="csv_file" type="file" multiple>
<input type="submit">
</form>
</body>
    """
    return HTMLResponse(content=content)


@app.post("/api/v1/scraped_csv")
async def extract_ads(csv_file: _fastapi.UploadFile = _fastapi.File(...)):
    temp_file = _save_file_to_disk(csv_file, path="temp", save_as="temp")
    await run_scraper(temp_file)
    csv_path = os.path.abspath(clean_file)
    return FileResponse(path=csv_path, media_type="text/csv", filename=clean_file)


def _save_file_to_disk(uploaded_file, path=".", save_as="default"):
    extension = os.path.splitext(uploaded_file.filename)[-1]
    temp_file = os.path.join(path, save_as + extension)
    with open(temp_file, "wb") as buffer:
        shutil.copyfileobj(uploaded_file.file, buffer)
    return temp_file

这是应用程序的链接。

https://fast-api-google-ads-scraper.herokuapp.com/

EN

回答 2

Stack Overflow用户

发布于 2022-05-24 20:29:52

我目前看到了两种可能性。

第一,增加超时前的等待时间。如果您使用Gunicorn,您可以使用-t INT--timeout INT,知道值是正数或0。将其设置为0会完全禁用所有工作人员的超时,从而产生无限超时的效果。

第二,使用异步请求/响应。您可以立即响应202,并告诉客户端他可以跟踪任务的状态,但是这需要创建一个新的端点、新的逻辑等等.

票数 0
EN

Stack Overflow用户

发布于 2022-05-24 22:14:26

一个可能的解决方案是@fchancel的建议。通过Redis队列作为后台任务运行抓取,并通知用户已经创建了一个带有job_id (在redis中的键)的作业。worker dynos可以将后台作业的结果存储在blob存储中。您可以使用job_id从blob存储中获取结果。

为了了解这份工作的现状,请看一下这个question

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72368799

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档