我正在开发一个 FastAPI 应用程序,我需要在 Redis 中存储 Azure OpenAI llm_client 对象以及一些会话数据,并设置过期时间。我最初尝试使用 pickle 进行序列化,但遇到了错误。然后我尝试使用 dill,希望它能更好地处理序列化,但遇到了另一个问题。
这是我与
pickle
使用的代码:
import redis
import pickle
from openai import AzureOpenAI
# Initialize Redis client
redis_client = redis.Redis(
host='redis-13661.c212.ap-south-1-1.ec2.redns.redis-cloud.com',
port=13661,
password="*******",
username="default"
)
# Initialize llm_client
client = AzureOpenAI(
azure_endpoint="https://my-openai-endpoint.azure.com/",
api_key="*******",
api_version="2024-02-01"
)
# Store session data in Redis with an expiration time of 1 hour
session_data = {"llm_client": client}
session_id = "1234"
redis_client.hmset(session_id, 3600, pickle.dumps(session_data))
当我运行此程序时,出现以下错误:
TypeError: cannot pickle '_thread.RLock' object
然后我尝试使用
dill
而不是 pickle
:
import redis
import dill
from openai import AzureOpenAI
# Initialize Redis client
redis_client = redis.Redis(
host='redis-13661.c212.ap-south-1-1.ec2.redns.redis-cloud.com',
port=13661,
password="*******",
username="default"
)
# Initialize llm_client
client = AzureOpenAI(
azure_endpoint="https://my-openai-endpoint.azure.com/",
api_key="*******",
api_version="2024-02-01"
)
# Store session data in Redis with an expiration time of 1 hour
session_data = {"llm_client": client}
session_id = "1234"
redis_client.hmset(session_id, 3600, dill.dumps(session_data))
但是,这也会失败并出现类似的错误:
TypeError: cannot pickle 'SSLContext' object
pickle
:导致 _thread.RLock
错误,可能是由于 llm_client
中的锁定对象所致。dill
:导致 SSLContext
错误,这表明 dill
也无法处理 llm_client
内的某些对象。llm_client
对象存储在Redis中?我的python版本和操作系统是3.10.13,Windows 11
import zhipuai
from multiprocessing import Process
class Test(Process):
def __init__(self):
super().__init__()
self.client = zhipuai.ZhipuAI(api_key="")
def run(self):
pass
if __name__ == '__main__':
p_list = []
for _ in range(2):
p = Test()
p.start()
p_list.append(p)
for p in p_list:
p.join()
我尝试初始化客户端发送http请求但失败了:
类型错误:无法腌制“_thread.RLock”对象
但在 Linux 中无需任何修改即可工作