LlmKira / contributor

✨ Custom AI Assistant: Leverage OpenAI for auto Issue review and Pull Request review. | 自用定制AI助理 开源维护工具 省心放心
https://github.com/apps/neutron-nerve
Other
2 stars 0 forks source link

feat:Cache Github requests to handle concurrent plugin requests. #9

Closed sudoskys closed 1 month ago

sudoskys commented 1 month ago

used solution: https://requests-cache.readthedocs.io/en/stable/examples.html#pygithub

neutron-nerve[bot] commented 1 month ago

报告:feat: 缓存 Github 请求以处理并发插件请求

总结

在处理并发插件请求时,频繁的Github API调用可能导致请求速率限制(rate limit)问题。为优化性能并减少对Github API的依赖,我们决定使用requests-cache库来缓存Github请求。本报告总结了使用requests-cache解决上述问题的具体方案。

解决方案

通过参考requests-cache提供的示例代码(参考链接),我们实现了以下步骤:

  1. 安装 requests-cache

    pip install requests-cache
  2. 集成 requests-cache 到当前项目 我们在项目初始化阶段设置了requests缓存,这样所有的Github API请求都会先检查缓存,只有在缓存未命中的情况下才会发送实际请求。

    import requests_cache
    from github import Github
    
    # 设置缓存,Expire time 为 1 小时
    requests_cache.install_cache('github_cache', expire_after=3600)
    
    # 使用 PyGithub 初始化 Github 对象
    g = Github("<your_github_access_token>")
    
    # 示例请求
    repo = g.get_repo("octocat/Hello-World")
  3. 验证缓存效果 在实际测试中,首个请求会存储在缓存中,后续相同请求将直接从缓存中获取,显著提高了响应速度并降低了对Github API的请求频率。

graph TB
    A[Start] --> B[Initialize Project]
    B --> C[Install requests-cache]
    C --> D[Setup Cache with requests-cache]
    D --> E[Make Github API Request]
    E --> F{Is Request in Cache?}
    F -- Yes --> G[Fetch Data from Cache]
    F -- No --> H[Send API Request to Github]
    H --> I[Store Response in Cache]
    I --> G
    G --> J[Process Data]
    J --> K[End]

以上流程图描述了请求过程及缓存工作机制。

通过这套缓存机制,成功解决了并发插件请求中的Github请求速率限制问题,提高了整体系统的性能和可靠性。