这是我第一次在这里发布问题,所以请原谅我,如果我错过了某些细节。如果需要,我会更新我的问题。因此,我想要的是能够下载一个大文件时,应用程序启动,但它应该发生的。在实际的应用程序启动不应该等待文件下载完成。
我现在做的是
from fastapi import FastAPI
app = FastAPI()
items = {}
@app.on_event("startup")
def startup_event():
//Download file
现在这似乎工作,但我得到了很多关键的工人超时错误。我想知道是否有某种方法可以在应用程序启动时进行下载,但也可以以一种不会让应用程序等待下载完成的方式进行。
2条答案
按热度按时间8aqjt8rx1#
让我们举个例子,在启动时下载10GB的文件(https://speed.hetzner.de/10GB.bin)。
当应用程序启动时,它使用
aiohttp
触发一个异步下载任务,从https://speed.hetzner.de/10GB.bin
获取一个文件并将其保存为downloaded_file。下载是分块进行的,此后台进程允许应用程序启动其他任务并响应传入的请求,而无需等待下载完成。
希望这段代码能有所帮助。
f3temu5u2#
这个答案从以前回答的问题中派生代码和信息。因此,请查看以下答案以了解更多详细信息和解释:
下面提供的解决方案使用
httpx
库,它为Python提供了一个强大的HTTP客户端库,一个async
API,并支持HTTP/1.1和HTTP/2。aiofiles
库还用于处理asyncio
应用程序中的文件操作(如将文件写入磁盘)。用于测试解决方案的公共视频(大文件)可以在here中找到。解决方案一
如果您希望在应用程序中重用HTTP客户端,请使用此解决方案。
方案二
如果您不需要重用HTTP客户端,而只需要在启动时使用它,请使用此解决方案。