python3.8 gevent openai 报错 openai.APIConnectionError: Connection error.

现象

python3.8.17版本中同时使用geventopenai 1.53.0包时,openai包报错openai.APIConnectionError: Connection error.

报错信息:

Traceback (most recent call last):
  File "/opt/anaconda3/envs/test3.8/lib/python3.8/site-packages/openai/_base_client.py", line 990, in _request
    response = self._client.send(
  File "/opt/anaconda3/envs/test3.8/lib/python3.8/site-packages/httpx/_client.py", line 926, in send
    response = self._send_handling_auth(
  File "/opt/anaconda3/envs/test3.8/lib/python3.8/site-packages/httpx/_client.py", line 954, in _send_handling_auth
    response = self._send_handling_redirects(
  File "/opt/anaconda3/envs/test3.8/lib/python3.8/site-packages/httpx/_client.py", line 991, in _send_handling_redirects
    response = self._send_single_request(request)
  File "/opt/anaconda3/envs/test3.8/lib/python3.8/site-packages/httpx/_client.py", line 1027, in _send_single_request
    response = transport.handle_request(request)
  File "/opt/anaconda3/envs/test3.8/lib/python3.8/site-packages/httpx/_transports/default.py", line 236, in handle_request
    resp = self._pool.handle_request(req)
  File "/opt/anaconda3/envs/test3.8/lib/python3.8/site-packages/httpcore/_sync/connection_pool.py", line 256, in handle_request
    raise exc from None
  File "/opt/anaconda3/envs/test3.8/lib/python3.8/site-packages/httpcore/_sync/connection_pool.py", line 236, in handle_request
    response = connection.handle_request(
  File "/opt/anaconda3/envs/test3.8/lib/python3.8/site-packages/httpcore/_sync/connection.py", line 101, in handle_request
    raise exc
  File "/opt/anaconda3/envs/test3.8/lib/python3.8/site-packages/httpcore/_sync/connection.py", line 78, in handle_request
    stream = self._connect(request)
  File "/opt/anaconda3/envs/test3.8/lib/python3.8/site-packages/httpcore/_sync/connection.py", line 156, in _connect
    stream = stream.start_tls(**kwargs)
  File "/opt/anaconda3/envs/test3.8/lib/python3.8/site-packages/httpcore/_backends/sync.py", line 170, in start_tls
    raise exc
  File "/opt/anaconda3/envs/test3.8/lib/python3.8/site-packages/httpcore/_backends/sync.py", line 165, in start_tls
    sock = ssl_context.wrap_socket(
  File "/opt/anaconda3/envs/test3.8/lib/python3.8/ssl.py", line 500, in wrap_socket
    return self.sslsocket_class._create(
  File "/opt/anaconda3/envs/test3.8/lib/python3.8/ssl.py", line 1004, in _create
    super(SSLSocket, self).__init__(**kwargs)
TypeError: super(type, obj): obj must be an instance or subtype of type

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/opt/anaconda3/envs/test3.8/lib/python3.8/site-packages/openai/_utils/_utils.py", line 274, in wrapper
    return func(*args, **kwargs)
  File "/opt/anaconda3/envs/test3.8/lib/python3.8/site-packages/openai/resources/chat/completions.py", line 815, in create
    return self._post(
  File "/opt/anaconda3/envs/test3.8/lib/python3.8/site-packages/openai/_base_client.py", line 1277, in post
    return cast(ResponseT, self.request(cast_to, opts, stream=stream, stream_cls=stream_cls))
  File "/opt/anaconda3/envs/test3.8/lib/python3.8/site-packages/openai/_base_client.py", line 954, in request
    return self._request(
  File "/opt/anaconda3/envs/test3.8/lib/python3.8/site-packages/openai/_base_client.py", line 1014, in _request
    return self._retry_request(
  File "/opt/anaconda3/envs/test3.8/lib/python3.8/site-packages/openai/_base_client.py", line 1092, in _retry_request
    return self._request(
  File "/opt/anaconda3/envs/test3.8/lib/python3.8/site-packages/openai/_base_client.py", line 1014, in _request
    return self._retry_request(
  File "/opt/anaconda3/envs/test3.8/lib/python3.8/site-packages/openai/_base_client.py", line 1092, in _retry_request
    return self._request(
  File "/opt/anaconda3/envs/test3.8/lib/python3.8/site-packages/openai/_base_client.py", line 1024, in _request
    raise APIConnectionError(request=request) from err
openai.APIConnectionError: Connection error.

版本信息

python 3.8.17
httpx 0.27.2
opena 1.53.0

原因

这是一个 ssl.wrap_socket 被 gevent monkey patch 后出现的兼容性问题,常见于 Python 3.8 + gevent + httpx(OpenAI SDK 1.x 默认使用 httpx)组合下。

解决方法

解决方案一:确保最早 monkey.patch_all()

在项目最开始(入口脚本的最上方)调用 gevent 的 monkey patch,如下:

from gevent import monkey
monkey.patch_all()

# 之后再导入 openai 等其他库
import openai

放错位置会导致 socket/ssl 没被正确 patch,出现你这种 ssl 报错。

解决方案二:升级python到3.9或更高

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无糖可乐·

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值