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

tornado数据库操作怎么异步

  •  
  •   cctvsmg ·
    ntkrnl · 2013-10-15 21:43:35 +08:00 · 9795 次点击
    这是一个创建于 4057 天前的主题,其中的信息可能已经有所发展或是发生改变。
    tornado作为一个web server性能很好
    但是真正费时的地方是IO啊

    求推荐各种异步驱动
    mysql mongodb postgresql都可以
    7 条回复    1970-01-01 08:00:00 +08:00
    shiny
        1
    shiny  
       2013-10-15 21:49:28 +08:00   ❤️ 1
    如果用 MongoDB,推荐motor,是一个异步的 mongodb 驱动,文档也比较齐全 http://motor.readthedocs.org/en/latest/differences.html

    其他对应的异步驱动这里都有写:https://github.com/facebook/tornado/wiki/Links
    但是大多数都看上去没经过大量考验,起码没多少人用。
    cctvsmg
        2
    cctvsmg  
    OP
       2013-10-15 21:51:22 +08:00
    @shiny 好顶赞!
    Muninn
        4
    Muninn  
       2013-10-15 21:58:18 +08:00
    postgres的叫momoko 但是。。。略微简陋 不过作者一直在完善
    vfasky
        5
    vfasky  
       2013-10-16 09:31:42 +08:00
    kernel1983
        6
    kernel1983  
       2013-10-16 11:57:10 +08:00
    一直以来的观点是, 如果数据库(本地或者在局域网内)的操作时间过长, 那么需要优化的是数据库, 以及联合查询, 另外该用NoSQL的用NoSQL, 该做cache的做cache ...


    刚刚想到一个方法, 用tornado毕竟是可以做异步request的, 如果你的数据库真的很慢, 不如再开其他的tornado做block数据库操作(你可以用tornado wsgi多线程/多进程形式部署, 也可以用django, flask等), 然后通过API的形式将数据库返回过来. 相当于用tornado给你的数据库操作web化(写内部数据API)

    这个是我刚才刚刚想到的, 原理就是用一些独立的进程去做费时的数据库操作, 这样你的主web tornado进程就可以异步畅通, 增加吞吐量. 这样就不需要为各个数据库写驱动了.

    如果数据库在不同的机器上, 那么可以考虑将这些独立的数据操作tornado进程在数据库机器上部署. 使用wsgi多线程/多进程的好处是查询可以同时进行, 当然也可能卡死数据库. 使用tornado自己的单进程异步部署的时候, tornado还可以充当一个数据库操作队列的作用.

    奇思妙想, 还没有经过实践
    zenliver
        7
    zenliver  
       2013-10-16 12:14:13 +08:00
    @kernel1983 如果有大量的阻塞任务, 后面那个tornado也会被阻塞, 然后就呵呵了, 最好就是异步io的方式,如果不能实现, 就扔到线程池做异步吧, 比如future.executor
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2172 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 01:24 · PVG 09:24 · LAX 17:24 · JFK 20:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.