当前位置: 首页 > news >正文

用 Python 接生图接口:从同步到异步并发的完整演进

Python 怎么调 AI 生图 API?三十行跑通 nano banana pro(含重试与异步并发)

网上 Python 调图像生成接口的例子大多绑死某一家 SDK,换个服务就得重写。其实完全不用 SDK——该服务兼容 OpenAI 的chat/completions协议,requests一个库就够了。

这篇给一份能直接抄进项目的实现:同步版三十行跑通,再补上重试和asyncio并发。

一、接口信息

Base URLhttps://API_HOST
接口POST /v1/chat/completions
鉴权Authorization: Bearer {你的API密钥}
数据格式application/json,UTF-8

二、最小实现

importosimportrequests ENDPOINT="https://API_HOST/v1/chat/completions"defgenerate(prompt:str,model:str="nano-banana-pro",timeout:int=120)->dict:"""调 AI 绘画API 出图。生图慢,timeout 一定要给足。"""resp=requests.post(ENDPOINT,headers={"Authorization":f"Bearer{os.environ['TTQ_API_KEY']}","Content-Type":"application/json",},json={"model":model,"messages":[{"role":"user","content":prompt}]},timeout=timeout,)resp.raise_for_status()returnresp.json()if__name__=="__main__":data=generate("白底电商主图,无线蓝牙耳机,居中构图,柔和顶光")print(data)

两个新手最容易踩的坑:密钥别写死在代码里(走环境变量,别提交进仓库);timeout别用默认值——requests默认是不超时的,网络一抖请求就永久挂住,跑批时整个进程卡死。

三、加重试

生图 API偶发 5xx 和网络抖动是常态,没有重试的批量脚本基本跑不完:

importtimefromrequests.exceptionsimportRequestExceptiondefgenerate_with_retry(prompt:str,model:str="nano-banana-pro",attempts:int=3)->dict:last=Noneforiinrange(attempts):try:returngenerate(prompt,model)exceptRequestExceptionase:last=e# 指数退避:2s、4s、8s。别用固定间隔,服务端抖动时会同时重试放大压力time.sleep(2**(i+1))raiselast

注意只对网络异常和 5xx重试。4xx 是请求本身有问题(密钥错、参数错、积分不足),重试多少次都一样,白白浪费时间。

四、异步并发

批量出图用asyncio+httpx比多线程干净得多,用信号量把并发压在配额之内:

importasyncioimporthttpxasyncdefbatch_generate(prompts:list[str],model:str="nano-banana2",workers:int=16):sem=asyncio.Semaphore(workers)# 同时在飞的请求数headers={"Authorization":f"Bearer{os.environ['TTQ_API_KEY']}"}asyncwithhttpx.AsyncClient(timeout=120)asclient:asyncdefone(idx:int,prompt:str):asyncwithsem:try:r=awaitclient.post(ENDPOINT,headers=headers,json={"model":model,"messages":[{"role":"user","content":prompt}],})r.raise_for_status()returnidx,r.json()exceptException:returnidx,None# 失败留空,跑完统一挑出来重试results=awaitasyncio.gather(*(one(i,p)fori,pinenumerate(prompts)))out=[None]*len(prompts)foridx,datainresults:out[idx]=datareturnout

结果按下标写回是关键——跑完一眼就能定位哪几条失败,不用整批重来。workers按自己配额调,16 起步比较稳。

五、模型怎么选

model字段直接换字符串,函数签名都不用动:

模型代码说明消耗
nano-banana2Flash 级,速度快,适合跑量8 积分/次
nano-banana-proPro 级,支持 1K/2K/4K10 积分/次
gpt-image-2细节质感好,适合终稿按次计费
Veo 3.1 视频生成/Sora 2生视频120 / 130 积分/次

实践上的分工:批量草稿用nano-banana2终稿切nano-banana-progpt-image-2再出一版对比,挑最好的用。

六、小结

Python 接生图接口的要点就四条:密钥走环境变量、timeout给足、只对 5xx 重试、并发用信号量压住。

该服务的 OpenAI 兼容协议让 Python 侧完全不需要 SDK,requestshttpx直接调。模型全(nano banana pro、gpt-image-2、Veo 3.1、Sora 2 一个密钥全接)、价格便宜(积分制明码标价)、并发高出图快稳定


接口服务:甜甜圈API(dashengfenshen.cn)

http://www.jsqmd.com/news/1395385/

相关文章:

  • 【单片机毕业设计】基于 STM32 的舵机驱动智能门禁安防系统设计 基于 STM32 的多重身份核验门禁控制系统开发(012503)
  • FreeRTOS递归互斥信号量:原理、API与实战避坑指南
  • Vim-go:在Vim中打造高效Go开发环境的完整指南
  • 量化交易入门:七类核心策略原理、实现与避坑指南
  • 没有绿幕也能实时抠像:obs-backgroundremoval 免费AI背景移除插件实战指南
  • Redis分布式锁深度解析:从SET NX原理到生产实践全攻略
  • 我用QQ空间导出工具,把十二年的在线记录一键搬回了本地硬盘
  • Linux下Tomcat开机自启动:init.d脚本与systemd方案深度对比与实践
  • Target平台API接口开发与电商数据获取实战
  • AI重塑人机协作:从自然语言编程到智能体工作流
  • 本地AI知识库搭建:Obsidian+Ollama实现笔记自动摘要与智能整理
  • 网盘限速又怕泄密?SyncTrayzor 让 Windows 文件同步回归本地速度
  • 【2027最新】基于SpringBoot+Vue的疫情打卡健康评测系统管理系统源码+MyBatis+MySQL
  • Redis安装部署全攻略:从环境变量到系统服务配置详解
  • 使用redis实现Agent的持久化记忆
  • 抖音批量下载工具douyin-downloader完整上手指南:去水印、批量抓取、直播录制一站搞定
  • IIS8.5伪静态配置实战:URL重写与SEO优化
  • 从臃肿到轻快:OmenSuperHub 重新定义惠普游戏本硬件控制
  • Ubuntu 18.04下GN与Ninja编译工具链的完整配置与实践指南
  • 软硬结合板
  • CentOS7 通过wget下载文件到指定目录
  • 【单片机毕业设计】基于 STM32 的温度烟雾采集与智能执行机构控制系统设计 基于 STM32 的环境参数实时监测与声光报警系统设计(012603)
  • VS2019 MFC计算器开发实战:从环境搭建到状态机设计
  • 布尔盲注实战解析:从原理到自动化工具Sqlmap应用
  • 黑苹果安装完整指南:从一台闲置PC到macOS双系统,3小时跑通OpenCore的6个关键动作
  • 官方25H2(26200.9168)2026 8月正式版更新ESD映像直链 (简体中文)
  • 第二十三章 个体价值认知工程
  • 如何用 BoneAnimCopy 在 Blender 中一步到位复制骨骼动画:新手完整指南
  • 网盘直链下载助手保姆级上手指南:不装客户端也能把文件搬到本地
  • 【单片机毕设案例分享】基于 STM32 的指纹录入与密码校验门禁系统设计 基于 STM32 单片机的可视化智能密码锁硬件开发(012502)