You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

添加OpenAI代码后Python服务请求时崩溃的问题排查

问题描述

原本正常运行的FastAPI服务(基于Gunicorn+Uvicorn部署),添加OpenAI相关代码后直接启动失败,客户端请求时无法连接服务器,报连接被拒绝错误。

原正常代码

from fastapi import FastAPI, Request
from pydantic import BaseModel
import uvicorn
import os
import importlib.util
import sys

app = FastAPI()

beep = True

@app.get('/')
def get_func():
        return {'text':'SLClient API active'}, 200

@app.post("/client/")
async def get_body(dat: Request):
        dat = await dat.json()
        global beep
        if beep == True:
                os.system("/usr/bin/beep -f 2000 -l 20")
        try:
                if dat == None:
                        return {'state':'error','e':'No data error'}
                else:
                        if dat['jobid'] == "nobeep":
                                beep = False
                                return {'state':'complete','jobid':dat['jobid']}
                        if dat['jobid'] == "beep":
                                beep = True
                                return {'state':'complete','jobid':dat['jobid']}
                        if dat['jobid'] == "ping":
                                return {'state':'complete','jobid':'0','text':'Pong'}
                        else:
                                return {'state':'complete','jobid':dat['jobid'],'text': dat['text'], 'username':dat['username'],'uid':dat['uid']}
        except Exception as e:
                return {'state':'error','e':str(e)}

修改后的代码(新增OpenAI调用)

from fastapi import FastAPI, Request
from pydantic import BaseModel
import uvicorn
import os
import importlib.util
import sys
import responses  # 新增导入

app = FastAPI()

beep = True

@app.get('/')
def get_func():
        return {'text':'SLClient API active'}, 200

@app.post("/client/")
async def get_body(dat: Request):
        dat = await dat.json()
        global beep
        if beep == True:
                os.system("/usr/bin/beep -f 2000 -l 20")
        try:
                if dat == None:
                        return {'state':'error','e':'No data error'}
                else:
                        if dat['jobid'] == "nobeep":
                                beep = False
                                return {'state':'complete','jobid':dat['jobid']}
                        if dat['jobid'] == "beep":
                                beep = True
                                return {'state':'complete','jobid':dat['jobid']}
                        if dat['jobid'] == "ping":
                                return {'state':'complete','jobid':'0','text':'Pong'}
                        if dat['jobid'] == "apiTest":
                                try:
                                        responses.chat("test","test")  # 调用自定义chat函数
                                        return {'state':'complete','jobid':'0','text':'No problems'}
                                except Exception as ex:
                                        return {'state':'error','e':str(ex)}
                        else:
                                return {'state':'complete','jobid':dat['jobid'],'text': dat['text'], 'username':dat['username'],'uid':dat['uid']}
        except Exception as e:
                return {'state':'error','e':str(e)}

自定义的responses.py(与主程序同目录)

import os
import openai

async def chat(prompt, sysmsg):
    openai.api_base = 'https://api.nova-oss.com/v1'
    openai.api_key = """##############################"""
    response = openai.ChatCompletion.create(model="gpt-3.5-turbo",messages=[{"role":"system", "content":sysmsg},{"role":"user", "content":prompt}])
    result=''
    for choice in response.choices:
        result += choice.message.content
    return result

错误信息

客户端报错

HTTPConnectionPool(host='192.168.68.200', port=5000): Max retries exceeded with url: /client/ (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x0000022DCBF01F90>: Failed to establish a new connection: [WinError 10061] No connection could be made because the target machine actively refused it'))

服务器systemctl状态

× api.service - Gunicorn instance manager to serve API
     Loaded: loaded (/etc/systemd/system/api.service; static)
     Active: failed (Result: exit-code) since Tue 2023-10-24 17:28:21 UTC; 12min ago
    Process: 1300 ExecStart=/home/webserver/SLClient/client/bin/gunicorn api:app -w 4 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:5000 (code=exited, status=3)
   Main PID: 1300 (code=exited, status=3)
        CPU: 6.767s

Oct 24 17:28:21 sparklink-server gunicorn[1304]: [2023-10-24 17:28:21 +0000] [1304] [INFO] Worker exiting (pid: 1304)
Oct 24 17:28:21 sparklink-server gunicorn[1300]: [2023-10-24 17:28:21 +0000] [1300] [ERROR] Worker (pid:1301) exited with code 3
Oct 24 17:28:21 sparklink-server gunicorn[1300]: [2023-10-24 17:28:21 +0000] [1300] [ERROR] Worker (pid:1304) was sent SIGTERM!
Oct 24 17:28:21 sparklink-server gunicorn[1300]: [2023-10-24 17:28:21 +0000] [1300] [ERROR] Worker (pid:1303) was sent SIGTERM!
Oct 24 17:28:21 sparklink-server gunicorn[1300]: [2023-10-24 17:28:21 +0000] [1300] [ERROR] Worker (pid:1302) was sent SIGTERM!
Oct 24 17:28:21 sparklink-server gunicorn[1300]: [2023-10-24 17:28:21 +0000] [1300] [ERROR] Shutting down: Master
Oct 24 17:28:21 sparklink-server gunicorn[1300]: [2023-10-24 17:28:21 +0000] [1300] [ERROR] Reason: Worker failed to boot.
Oct 24 17:28:21 sparklink-server systemd[1]: api.service: Main process exited, code=exited, status=3/NOTIMPLEMENTED
Oct 24 17:28:21 sparklink-server systemd[1]: api.service: Failed with result 'exit-code'.
Oct 24 17:28:21 sparklink-server systemd[1]: api.service: Consumed 6.767s CPU time.
解决步骤

1. 修改脚本名解决模块命名冲突

自定义脚本responses.py与Python第三方库responses重名,会导致导入混淆。将该脚本重命名为openai_chat.py,并修改主程序中的导入语句:

# 替换原 import responses
import openai_chat as responses

2. 安装缺失的依赖

responses.py中使用了openai库,若虚拟环境未安装该库,服务启动会失败。执行以下命令安装:

pip install openai

3. 异步函数调用添加await关键字

chat是用async定义的异步函数,调用时必须添加await,否则不会执行实际逻辑,还可能引发错误。修改主程序中的调用代码:

# 替换原 responses.chat("test","test")
await responses.chat("test","test")

4. 可选:改用OpenAI异步客户端优化性能

当前使用的是OpenAI同步客户端,在FastAPI异步框架中,推荐使用异步客户端避免阻塞事件循环。修改改名后的openai_chat.py:

import os
from openai import AsyncOpenAI

async def chat(prompt, sysmsg):
    client = AsyncOpenAI(
        api_key="##############################",
        base_url="https://api.nova-oss.com/v1"
    )
    response = await client.chat.completions.create(
        model="gpt-3.5-turbo",
        messages=[{"role":"system", "content":sysmsg},{"role":"user", "content":prompt}]
    )
    result = response.choices[0].message.content
    return result

验证流程

  1. 完成脚本重命名与导入语句修改
  2. 安装openai依赖
  3. 添加await关键字完成异步调用
  4. 重启服务:systemctl restart api.service
  5. 检查服务状态:systemctl status api.service,确认服务正常运行
  6. 重新发起请求测试

内容的提问来源于stack exchange,提问作者Proxy303

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 20:40:53