目前的情况是,一个 Tornado 进程, 然后按我的理解,请求来了以后,会自己开线程处理的。 那么问题来了:
1、多个进程同时读取SQLite,会有锁定么? 网上说多个进程可以同时读写,但说写的时候有锁定,那读的时候,是不是都能立马返回?如果可以立马返回, 那应该可以开多个 Tornado 了吧?
2、多个线程之间,不能共享句柄么?网上说,多线程之间共享句柄可能存在问题,那多线程查询的话,每次要connect,然后在close么? 怎么样能在 Tornado 里保持SQLite的长连接呢?
目前的需求是: SQLite 只读,没有写的需求。
1
tabris17 2015-02-26 16:24:55 +08:00
Tornado是单线程的
|
6
mengskysama 2015-02-26 16:47:22 +08:00
tornodo是NIO框架,不能阻塞,不是排队的问题了,浏览器的请求是根本不会accept。
|
7
mengskysama 2015-02-26 16:49:03 +08:00
SQLite多线程同时操真不好说,还是mysql吧,推荐你用这个https://github.com/PyMySQL/Tornado-MySQL
|
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这个组合怪怪的
|
9
pandada8 2015-02-26 18:41:59 +08:00
如果不是多读少写或者开发时使用,建议不要使用Sqlite
|
10
feelapi 2015-02-26 18:54:13 +08:00
http://uri.agassi.co.il/2014/10/using-sqlite-for-production.html
看看这个,如果是只读的话,还是不错的。可以生成只读数据供前台用。 |
11
mengskysama 2015-02-26 19:39:50 +08:00
非要用sqlite的话建议把需要把同步的调用"变成"异步的,而不是开多个tornado。
建议使用future的线程池来实现,参考http://lbolla.info/blog/2013/01/22/blocking-tornado sqlite还要有严格的读写互斥。 |
12
mathgl 2015-03-05 18:04:34 +08:00 via Android
用线程池,共享conn是没问题的。可以考虑用apsw。比标准库的好些。
|
13
sivacohan 2015-07-02 23:57:36 +08:00 via Android
SQLite官网就说了。目标是替代fopen不是替代MySQL等东西。
简单做demo可以,生产环境还是不要用了吧。 |