analyze_video.py 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import asyncio
  2. import uvicorn
  3. from fastapi import FastAPI
  4. from pydantic import BaseModel
  5. from google_ai.generativeai_video import main
  6. app = FastAPI()
  7. api_keys = [
  8. {'key': 'AIzaSyAa4H7YzIOiqA0QIDuO6kNErFBoWT-BEtc', 'locked': False},
  9. {'key': 'AIzaSyC-IxUvJhbiKWA7uN1RTtVbOjt3pj_-Apc', 'locked': False},
  10. {'key': 'AIzaSyB43Pvugb-CMkEXJUSubXEAxKxYflCPPNU', 'locked': False}
  11. ]
  12. lock = asyncio.Lock()
  13. class VideoRequest( BaseModel ):
  14. video_path: str
  15. async def get_available_api_key():
  16. """获取一个未锁定的 API key,如果没有可用的则等待 60 秒后重试"""
  17. while True: # 无限循环,直到找到可用的 key
  18. async with lock:
  19. for key_data in api_keys:
  20. if not key_data['locked']:
  21. key_data['locked'] = True # 锁定该 key
  22. return key_data['key']
  23. # 如果没有找到可用的 key,等待 60 秒后重试
  24. print( "没有可用的 API key,等待 60 秒后重试..." )
  25. await asyncio.sleep( 60 )
  26. async def release_api_key(api_key):
  27. """释放已锁定的 API key"""
  28. async with lock:
  29. for key_data in api_keys:
  30. if key_data['key'] == api_key:
  31. key_data['locked'] = False # 释放该 key
  32. break
  33. @app.post( "/process_video/" )
  34. async def process_video(request: VideoRequest):
  35. """处理视频请求"""
  36. video_path = request.video_path
  37. # 获取一个可用的 API key
  38. api_key = await get_available_api_key()
  39. try:
  40. print( "来一个请求,使用 API key:", api_key )
  41. result, mark = await main( video_path, api_key )
  42. return {
  43. "code": 0,
  44. "message": "视频处理成功",
  45. "result": result,
  46. "mark": mark
  47. }
  48. except Exception as e:
  49. print( f"视频处理失败: {str( e )}" )
  50. return {
  51. "code": 1,
  52. "message": f"视频处理失败: {e}",
  53. "result": f"视频处理失败: {e}",
  54. "mark": f"视频处理失败: {e}"
  55. }
  56. finally:
  57. # 释放 API key,确保后续请求可以使用
  58. await release_api_key( api_key )
  59. if __name__ == "__main__":
  60. # proxy_url = 'http://127.0.0.1:1081'
  61. # os.environ["http_proxy"] = proxy_url
  62. # os.environ["https_proxy"] = proxy_url
  63. uvicorn.run(app, host="0.0.0.0", port=8080)