V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
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 · 2015-02-26 16:22:28 +08:00 · 5964 次点击
    这是一个创建于 3586 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

    sqlite还要有严格的读写互斥。
    mathgl
        12
    mathgl  
       2015-03-05 18:04:34 +08:00 via Android
    用线程池,共享conn是没问题的。可以考虑用apsw。比标准库的好些。
    sivacohan
        13
    sivacohan  
       2015-07-02 23:57:36 +08:00 via Android
    SQLite官网就说了。目标是替代fopen不是替代MySQL等东西。
    简单做demo可以,生产环境还是不要用了吧。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2512 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 03:25 · PVG 11:25 · LAX 19:25 · JFK 22:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.