编写的代码只在调用端点时触发其他服务器,并等待来自Redis中特定通道的数据进入.我不想知道外部服务器的业务逻辑是由于延迟而完成的.
下面的call_external_server
后台任务函数将通知外部服务器向Redis(发布/订阅)发送数据.然而,它不会执行.
以下是我的代码:
async def call_external_server(channel, text):
print("call_external_server start")
async with aiohttp.ClientSession() as session:
async with session.get(f"http://localhost:9000/pub?channel={channel}&text={text}") as resp:
print(resp)
print("call_external_server finished")
return {"response": "external_server is done"}
@app.websocket("/ws")
async def websocket_endpoint(channel: str, websocket: WebSocket, background_task: BackgroundTasks):
await websocket.accept()
client_info = dict(websocket.headers)
text = client_info.get("text")
redis_reader: redis.client.PubSub = await get_redis_pubsub()
await redis_reader.subscribe(channel)
# Problem is Here
background_task.add_task(call_external_server, channel, text)
# Background task Doesn't work properly
try:
while True:
message = await redis_reader.get_message(ignore_subscribe_messages=True)
if message is not None:
decoded_msg = message["data"].decode()
if decoded_msg == STOPWORD:
print("(Reader) STOP")
break
await websocket.send_text(decoded_msg)
except Exception as e:
print(e)
await websocket.close()
return
await websocket.close()
return