Tornado Documentation
http://www.v2ex.com/tornado/
Tornado on GitHub
https://github.com/facebook/tornado/
Tornado Gists
http://tornadogists.org/
invite
V2EX  ›  Tornado

新手求教关于 Tornado + SQLite 的两个问题

  •  
  •   invite · Feb 26, 2015 · 6658 views
    This topic created in 4126 days ago, the information mentioned may be changed or developed.

    目前的情况是,一个 Tornado 进程, 然后按我的理解,请求来了以后,会自己开线程处理的。 那么问题来了:

    1、多个进程同时读取SQLite,会有锁定么? 网上说多个进程可以同时读写,但说写的时候有锁定,那读的时候,是不是都能立马返回?如果可以立马返回, 那应该可以开多个 Tornado 了吧?

    2、多个线程之间,不能共享句柄么?网上说,多线程之间共享句柄可能存在问题,那多线程查询的话,每次要connect,然后在close么? 怎么样能在 Tornado 里保持SQLite的长连接呢?

    目前的需求是: SQLite 只读,没有写的需求。

    13 replies    2015-07-02 23:57:36 +08:00
    tabris17
        1
    tabris17  
       Feb 26, 2015
    Tornado是单线程的
    invite
        2
    invite  
    OP
       Feb 26, 2015
    @tabris17 啊?不是说多线程的么? 那单线程的话,多个请求,要排队?这样能快?
    tabris17
        3
    tabris17  
       Feb 26, 2015
    @invite 请求来了开线程处理那是apache。tornado类似nodejs,reactor模式
    invite
        4
    invite  
    OP
       Feb 26, 2015
    @tabris17 啊? 那如果我一个请求耗时比较长,那后续请求,一直在排队?
    tabris17
        5
    tabris17  
       Feb 26, 2015
    @invite 耗时的运算可以开新线程或交给其他进程来处理,所有I/O接口应该使用非阻塞接口
    mengskysama
        6
    mengskysama  
       Feb 26, 2015
    tornodo是NIO框架,不能阻塞,不是排队的问题了,浏览器的请求是根本不会accept。
    mengskysama
        7
    mengskysama  
       Feb 26, 2015
    SQLite多线程同时操真不好说,还是mysql吧,推荐你用这个https://github.com/PyMySQL/Tornado-MySQL
    mengskysama
        8
    mengskysama  
       Feb 26, 2015
    Tornado-MySQL好像是我能找到的最,上面这个SQL协议完全用tornado的框架重写了。sqllite多线程同时操作的话会有锁的问题。我之前也试过几个你可以参考下。http://blog.mengsky.net/tornado-mysqlyi-bu-shi-xian-na-jia-qiang/..还有Tornado和SQLite这个组合怪怪的
    pandada8
        9
    pandada8  
       Feb 26, 2015
    如果不是多读少写或者开发时使用,建议不要使用Sqlite
    feelapi
        10
    feelapi  
       Feb 26, 2015
    http://uri.agassi.co.il/2014/10/using-sqlite-for-production.html
    看看这个,如果是只读的话,还是不错的。可以生成只读数据供前台用。
    mengskysama
        11
    mengskysama  
       Feb 26, 2015
    非要用sqlite的话建议把需要把同步的调用"变成"异步的,而不是开多个tornado。
    建议使用future的线程池来实现,参考http://lbolla.info/blog/2013/01/22/blocking-tornado

    sqlite还要有严格的读写互斥。
    mathgl
        12
    mathgl  
       Mar 5, 2015 via Android
    用线程池,共享conn是没问题的。可以考虑用apsw。比标准库的好些。
    sivacohan
        13
    sivacohan  
    PRO
       Jul 2, 2015 via Android
    SQLite官网就说了。目标是替代fopen不是替代MySQL等东西。
    简单做demo可以,生产环境还是不要用了吧。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5521 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 06:56 · PVG 14:56 · LAX 23:56 · JFK 02:56
    ♥ Do have faith in what you're doing.