V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
makerbi
V2EX  ›  Python

简单改造了一下阿里云的 oss2 模块,底层改用 httpx,支持异步和类型提示

  •  
  •   makerbi · 37 天前 · 1075 次点击
    这是一个创建于 37 天前的主题,其中的信息可能已经有所发展或是发生改变。

    项目代码: https://github.com/AndersonBY/aliyun-oss-x

    起因是我的一些服务跑在阿里云的函数计算上,最近感觉冷启动实在是太慢了,查了一下发现阿里云官方的 oss2 模块的导入实在是相当耗时,我用最低配的函数计算服务冷启动大概需要花 5 秒才能导入完 oss2 。而我大部分的函数计算实际上只需要简单的文件上传和下载,所以打算自己改写一下官方的 oss2 模块,于是就有了这个 aliyun-oss-x 模块。

    我大概花了一天多的时间把 oss2 项目简单重构了一下,底层从 requests 改成了 httpx ,所以可以支持异步方法的使用了,而且我花了不少时间把尽量能懒加载的模块都延迟加载了,以及把类型标注给补上了一些。

    简单说一下我看到 oss2 的一些问题。

    1. 默认安装并导入了 aliyunsdkkms 和 aliyunsdkcore ,这两个模块是启动耗时大户之一。然而只有使用阿里云的 KMS 服务才需要用到,所以没必要放顶层导入。
    2. 基本没有类型标注,导致很多方法的返回值都是 Unknown ,没法直接让 IDE 获取返回值的属性。
    3. 底层用的 requests ,没有异步支持。
    4. models 和 api 文件都是所有东西放在一个单一文件里,都超过 3000 行,导致重构略微麻烦。

    目前 1~3 都解决了,4 的话要花很多时间暂时没做太多调整。我简单测了基本的一些对象操作(同步和异步)都没有问题,但是可能有不太常用的功能会有问题,暂时没有完整测试过。

    另外我简单测试了一下用新模块之后函数计算的冷启动少了一半时间,而且内存占用也从 70 M 降到了 40 M 。至少冷启动这里的耗时降低能直接给我省钱了。

    欢迎有兴趣的朋友可以试试看,有问题的话随时提 issue 。

    2 条回复    2024-10-28 14:07:42 +08:00
    CassianVale
        1
    CassianVale  
       23 天前
    前两天自己项目加了 oss2 ,打包体积直接变大,并且还找不到 aliyunsdkcore 下面的 retry_config.json 等几个 json 文件,不知道是打包工具的问题还是 aliyunsdkcore 的问题
    makerbi
        2
    makerbi  
    OP
       21 天前
    @CassianVale 估计是打包的问题,可以直接用 aliyun-oss-x 替代试试,默认是不需要 aliyunsdkcore 的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3144 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 13:42 · PVG 21:42 · LAX 05:42 · JFK 08:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.