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
Qzier
V2EX  ›  Python

奇怪! mysql-connector- Python 在 Python 3.7 下特别慢

  •  
  •   Qzier · 2018-10-13 12:31:53 +08:00 · 5094 次点击
    这是一个创建于 2234 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我测试了下 Python 几大 MySQL 驱动的查询速度。

    http://ww1.sinaimg.cn/large/6909e98fgy1fw6hf5vx7fj20sl0833zo.jpg

    和预料的一样,pymysql 是最慢的,mysqlclient 很快,但是 mysql-connector-python 更快,但是只是在 Python 3.6 下最快,一旦到了 Python 3.7,反而比 pymysql 还慢,这是怎么回事?

    第 1 条附言  ·  2018-10-13 13:44:35 +08:00
    问题解决了,原来 Pypi 上还没有给 Python 3.7 提供含 C 扩展的 whl,默认装的 mysql_connector_python-8.0.12-py2.py3-none-any.whl 这个 whl,这个 whl 不含 C 扩展,是纯 Python 代码,所以慢出翔!
    12 条回复    2019-06-07 17:09:13 +08:00
    Qzier
        1
    Qzier  
    OP
       2018-10-13 12:34:57 +08:00   ❤️ 1
    图片怎么不显示?

    Qzier
        2
    Qzier  
    OP
       2018-10-13 12:36:41 +08:00
    查询数据量 30w
    congeec
        3
    congeec  
       2018-10-13 13:01:53 +08:00 via iPhone
    求 benchmark 代码
    Qzier
        4
    Qzier  
    OP
       2018-10-13 13:08:08 +08:00
    @congeec 就是最简单 select * from table 的查询啊
    westoy
        5
    westoy  
       2018-10-13 13:12:07 +08:00
    mysql-connector-python 带个加速扩展, 没有的话 fallback 到纯 python 就慢出翔了

    pypi 上 3.7 以上版本的 whl 自带,3.7 没有, 你从源码安装吧
    Qzier
        6
    Qzier  
    OP
       2018-10-13 13:15:00 +08:00
    @westoy 直接 `pip install mysql-connector-python` 的
    NoAnyLove
        7
    NoAnyLove  
       2018-10-13 13:35:00 +08:00
    5 楼正解,3.6 的 mysql_connector_python-8.0.12-cp36-cp36m-win_amd64.whl 包带了编译好的 dll,而 3.7 用的通用包 mysql_connector_python-8.0.12-py2.py3-none-any.whl 没有预编译好的扩展
    Qzier
        8
    Qzier  
    OP
       2018-10-13 13:42:17 +08:00
    @NoAnyLove 学习了,刚刚试了下从源码编译安装,速度又回来了。

    [pymysql]
    用时:11.067870310999979
    [mysqlclient]
    用时:2.3283727630000612
    [mysql.connector]
    用时:1.1639837800000805

    安装代码
    sudo /home/qzier/.pyenv/versions/3.7.0/bin/python setup.py install --with-mysql-capi=/usr/bin/mysql_config
    sadhen
        9
    sadhen  
       2018-10-13 13:45:14 +08:00
    benchmark 代码得提供吧。另外,Python 有类似于 Java 的 Flight Recorder 那种东西么。

    可以弄一个火焰图,看一下到底性能瓶颈在什么地方
    sadhen
        10
    sadhen  
       2018-10-13 13:45:41 +08:00
    类似于 JMH 这样的,python 也应该有的吧
    cy97cool
        11
    cy97cool  
       2018-10-14 01:10:44 +08:00 via Android
    原来 pymysql 性能差距这么大 感谢楼主提供
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5427 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 03:50 · PVG 11:50 · LAX 19:50 · JFK 22:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.