FastApi:如何一次性定义一个全局变量
FastApi: How to define a global variable once
我想定义一次字典变量,从文本文件生成,并用它来回答 API 请求。
这个变量应该一直可用直到服务器结束 运行。
在下面的示例中:
from fastapi import FastAPI
import uvicorn
app = FastAPI()
def init_data(path):
print("init call")
data = {}
data[1] = "123"
data[2] = "abc"
return data
data = init_data('path')
@app.get('/')
def example_method():
# data is defined
return {'Data': data[1]}
if __name__ == '__main__':
uvicorn.run(f'example_trouble:app', host='localhost', port=8000)
我会得到:
init call
init call
INFO: Started server process [9356]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://localhost:8000 (Press CTRL+C to quit)
并向 localhost:8000 请求不会引发任何错误
我应该如何定义一个变量,该变量将作为全局变量被任何请求访问?有没有通用的方式定义一次就可以使用?
必要时要求:
fastapi==0.68.1
pydantic==1.8.2
starlette==0.14.2
typing-extensions==3.10.0.2
一种方法是在应用程序启动时使用 FastAPI startup event 定义变量 data
。
一个类似于您在问题中提供的示例:
from fastapi import FastAPI
import uvicorn
app = FastAPI()
data = {}
@app.on_event('startup')
def init_data():
print("init call")
path='/an/example/path'
data[1] = "123"
data[2] = "abc"
return data
@app.get('/')
def example_method():
# data is defined
return {'Data': data[1]}
if __name__ == '__main__':
uvicorn.run(f'example_trouble:app', host='localhost', port=8000)
当 运行 应用程序时,您会看到该功能仅执行一次:
INFO: Started server process [37992]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
init call
我想定义一次字典变量,从文本文件生成,并用它来回答 API 请求。
这个变量应该一直可用直到服务器结束 运行。
在下面的示例中:
from fastapi import FastAPI
import uvicorn
app = FastAPI()
def init_data(path):
print("init call")
data = {}
data[1] = "123"
data[2] = "abc"
return data
data = init_data('path')
@app.get('/')
def example_method():
# data is defined
return {'Data': data[1]}
if __name__ == '__main__':
uvicorn.run(f'example_trouble:app', host='localhost', port=8000)
我会得到:
init call
init call
INFO: Started server process [9356]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://localhost:8000 (Press CTRL+C to quit)
并向 localhost:8000 请求不会引发任何错误
我应该如何定义一个变量,该变量将作为全局变量被任何请求访问?有没有通用的方式定义一次就可以使用?
必要时要求:
fastapi==0.68.1
pydantic==1.8.2
starlette==0.14.2
typing-extensions==3.10.0.2
一种方法是在应用程序启动时使用 FastAPI startup event 定义变量 data
。
一个类似于您在问题中提供的示例:
from fastapi import FastAPI
import uvicorn
app = FastAPI()
data = {}
@app.on_event('startup')
def init_data():
print("init call")
path='/an/example/path'
data[1] = "123"
data[2] = "abc"
return data
@app.get('/')
def example_method():
# data is defined
return {'Data': data[1]}
if __name__ == '__main__':
uvicorn.run(f'example_trouble:app', host='localhost', port=8000)
当 运行 应用程序时,您会看到该功能仅执行一次:
INFO: Started server process [37992]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
init call