‘asyncio‘ with OpenAI API Call Hangs After Extended Run Time

2024-08-27 21:04

本文主要是介绍‘asyncio‘ with OpenAI API Call Hangs After Extended Run Time,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题意:“使用 OpenAI API 调用时,asyncio 在长时间运行后挂起”

问题背景:

I'm using asyncio alongside the OpenAI API to translate a set of texts concurrently. Initially, everything works as expected, and I see the answers from OpenAI printed in the console. However, after running for a while, the code seems to hang. Subsequent answers from OpenAI are not printed in the console, and I don't see any "retrying" messages either. Here's my code:

“我在使用 asyncio 结合 OpenAI API 并发翻译一组文本。最初,一切都按预期工作,我在控制台中看到来自 OpenAI 的回答。然而,运行一段时间后,代码似乎挂起了。来自 OpenAI 的后续回答未显示在控制台中,我也没有看到任何‘重试’消息。以下是我的代码:”

import asyncio
from aiohttp import ClientSession
import openai
import os
openai.api_key = os.getenv("OPENAI_API_KEY")async def _atranslate(sem, messages, **model_kwargs):max_retry = 2async with sem:while max_retry > 0:try:response = await openai.ChatCompletion.acreate(messages=messages,**model_kwargs)answer = response.choices[0]['message']['content']print(answer)return answerexcept Exception as e:print(e)await asyncio.sleep(5)max_retry -= 1print('retrying...')raise ConnectionError('cannot reach openai!')async def atranslate(text_list: list, source=None, target='English', max_workers=3, **model_kwargs):aio_session = ClientSession()openai.aiosession.set(aio_session)model_kwargs.setdefault('model', 'gpt-3.5-turbo')model_kwargs.setdefault('temperature', 1)model_kwargs.setdefault('timeout', 10)template = 'Translate the following {source} text into {target}:{text}'semaphore = asyncio.Semaphore(max_workers)tasks = []for text in text_list:messages = [{'role': 'user','content': template.format(source=source,target=target,text=text)}]tasks.append(asyncio.create_task(_atranslate(semaphore, messages, **model_kwargs)))results = await asyncio.gather(*tasks)await aio_session.close()return resultsif __name__ == '__main__':textList = '... (some texts are omitted for brevity)'translations = asyncio.run(atranslate(textList*20, 'Korean', 'English',30))

When I run the above code, it starts off well but after some time, it simply hangs. What could be causing this? Are there any solutions or suggestions to address this issue?

“当我运行上述代码时,起初一切正常,但一段时间后,它就挂起了。可能是什么原因导致的?是否有解决方案或建议来解决这个问题?”

I have tried to change the timeout parameter or simply not raise ConnectionError, but it doesn't work.I think it might be the problem of api usage limits, but I don't know why it doesn't throw any error.

“我尝试更改超时参数或干脆不抛出 ConnectionError,但没有效果。我认为这可能是 API 使用限制的问题,但我不明白为什么它没有抛出任何错误。”

问题解决:

Two things, first I would wrap the use of ClientSession in try...finally, or use it as a contextmanager as shown here.

“两点建议:首先,我会将 ClientSession 的使用包装在 try...finally 中,或者像这里显示的那样将其用作 contextmanager。”

Also, if you are pretty sure that there are some exceptions getting swallowed somewhere, try to catch BaseException instead of Exception. Yes, there is a BaseException class which except Exception: won't catch, and the asyncio library throws exceptions derived from BaseException sometimes.

“此外,如果你确定某些异常在某处被吞掉了,可以尝试捕获 BaseException 而不是 Exception。是的,确实有一个 BaseException 类,而 except Exception: 并不会捕获它。asyncio 库有时会抛出从 BaseException 派生的异常。”

这篇关于‘asyncio‘ with OpenAI API Call Hangs After Extended Run Time的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1112768

相关文章

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

浅析如何使用Swagger生成带权限控制的API文档

《浅析如何使用Swagger生成带权限控制的API文档》当涉及到权限控制时,如何生成既安全又详细的API文档就成了一个关键问题,所以这篇文章小编就来和大家好好聊聊如何用Swagger来生成带有... 目录准备工作配置 Swagger权限控制给 API 加上权限注解查看文档注意事项在咱们的开发工作里,API

一分钟带你上手Python调用DeepSeek的API

《一分钟带你上手Python调用DeepSeek的API》最近DeepSeek非常火,作为一枚对前言技术非常关注的程序员来说,自然都想对接DeepSeek的API来体验一把,下面小编就来为大家介绍一下... 目录前言免费体验API-Key申请首次调用API基本概念最小单元推理模型智能体自定义界面总结前言最

JAVA调用Deepseek的api完成基本对话简单代码示例

《JAVA调用Deepseek的api完成基本对话简单代码示例》:本文主要介绍JAVA调用Deepseek的api完成基本对话的相关资料,文中详细讲解了如何获取DeepSeekAPI密钥、添加H... 获取API密钥首先,从DeepSeek平台获取API密钥,用于身份验证。添加HTTP客户端依赖使用Jav

C#使用DeepSeek API实现自然语言处理,文本分类和情感分析

《C#使用DeepSeekAPI实现自然语言处理,文本分类和情感分析》在C#中使用DeepSeekAPI可以实现多种功能,例如自然语言处理、文本分类、情感分析等,本文主要为大家介绍了具体实现步骤,... 目录准备工作文本生成文本分类问答系统代码生成翻译功能文本摘要文本校对图像描述生成总结在C#中使用Deep

5分钟获取deepseek api并搭建简易问答应用

《5分钟获取deepseekapi并搭建简易问答应用》本文主要介绍了5分钟获取deepseekapi并搭建简易问答应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需... 目录1、获取api2、获取base_url和chat_model3、配置模型参数方法一:终端中临时将加

使用DeepSeek API 结合VSCode提升开发效率

《使用DeepSeekAPI结合VSCode提升开发效率》:本文主要介绍DeepSeekAPI与VisualStudioCode(VSCode)结合使用,以提升软件开发效率,具有一定的参考价值... 目录引言准备工作安装必要的 VSCode 扩展配置 DeepSeek API1. 创建 API 请求文件2.

MySQL中时区参数time_zone解读

《MySQL中时区参数time_zone解读》MySQL时区参数time_zone用于控制系统函数和字段的DEFAULTCURRENT_TIMESTAMP属性,修改时区可能会影响timestamp类型... 目录前言1.时区参数影响2.如何设置3.字段类型选择总结前言mysql 时区参数 time_zon

Python 标准库time时间的访问和转换问题小结

《Python标准库time时间的访问和转换问题小结》time模块为Python提供了处理时间和日期的多种功能,适用于多种与时间相关的场景,包括获取当前时间、格式化时间、暂停程序执行、计算程序运行时... 目录模块介绍使用场景主要类主要函数 - time()- sleep()- localtime()- g