大家好,这是我在这项服务中的第一个请求,所以我很高兴见到大家^
我在使用FastApi时遇到了一些问题
我有raspberry pi 3和带USB接口的条形码扫描仪,我现在知道如何使用while循环获取数据,但我需要从请求中获取此数据,因此我正在为此编写异步脚本:
from fastapi import FastAPI
from starlette.middleware.cors import CORSMiddleware
from starlette.requests import Request
from starlette.responses import JSONResponse
from services.barcode import barcode_reader
app = FastAPI()
app.add_middleware(CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"])
barcode = ""
async def get_barcode():
try:
while True:
# barcode = barcode_reader()
if barcode != "":
return barcode
except KeyboardInterrupt:
pass
@app.get("/barcode")
async def read_barcode():
return await get_barcode()
@app.post("/barcode/{barcodeStr}")
async def write_barcode(barcodeStr: str):
barcode = barcodeStr
return "success"
但是当我发出GET请求时,我不能将数据与POST请求放在一起,将来我将有更多的方法不断执行,我不希望有一个方法阻塞整个API
请帮帮我
仅仅看一下您提供的代码,我不确定您希望条形码阅读器如何工作。您没有提供输入,因此我看不出它将如何处理条形码
您在
POST
路由中接受了barcodeStr
路径参数,因此我假设您希望您的服务是这样工作的。您的get_barcode
协同程序似乎也没有使用returna Future或Task。在这种情况下,您是正确的,因为它很可能是一个阻塞操作如果条形码阅读器服务正在调用外部API或通常是IO绑定函数,则使用
async/await
语法可以避免阻塞事件循环您的代码可能会被重新编写,如下所示:
相关问题 更多 >
编程相关推荐