我的python程序如何通过FastAPI同时工作和提供结果?

uttx8gqw  于 2023-03-21  发布在  Python
关注(0)|答案(1)|浏览(228)

我有一个读取金融市场数据进行分析的Python程序。我想通过FastAPI提供分析结果。问题是当我启动fastAPI的uvicorn服务器时,Python程序的其余部分,尤其是主循环,无法正确执行。
我不清楚如何在一个Python程序中使用FastAPI,而这个Python程序还必须做其他的工作。下面是我的www.example.com的main.py样子(为了简单起见,省略了import...):

# Add fastAPI.
app = FastAPI()

# Start market scanner.
ms1 = MarketScanner(name="ms1", sample_size=10)

# Get the root.
@app.get("/")
def read_root():
    return {"Welcome": "to analyst."}

# For test purpose, get length of the current market data cache.
@app.get("/mdata/")
def read_market_data_len():
    mdata = ms1.get_market_data_len()
    #print(f"mdata: {mdata}")
    return {"Market data length": mdata}

if __name__ == "__main__":
    ms1.start()
    while True:
        ms1.get_new_market_data()
        print(f"market data length: {ms1.get_market_data_len()}")
        time.sleep(3)

我从命令行启动uvicorn服务器:

uvicorn main:app --reload

当unicorn服务器运行时,我启动Python程序

python main.py

我可以看到while-loop中print的市场数据长度增加,所以我的MarketScanner从金融数据提供者获取数据,但是当我127.0.0.1:8000/mdata在浏览器中导航到www.example.com时,我总是看到“市场数据长度:0”,它只是从来没有增加。
我在这里有点迷失了,我怎么能用fastAPI构建一个python应用程序,但也有很多其他功能,它在后台处理?

vxf3dgd4

vxf3dgd41#

我想你正在运行两个不同的进程,一个服务于Web应用程序,另一个单独运行此模块。这两个程序完全独立于另一个。每个进程都有自己的MarketScanner示例,完全独立于另一个。
一种选择是将MarketScanner移动到函数中,并在模块导入时在线程中运行该函数。

相关问题