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

2015-02-26 16:22:28 +08:00
 invite

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

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

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

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

5964 次点击
所在节点    Tornado
13 条回复
tabris17
2015-02-26 16:24:55 +08:00
Tornado是单线程的
invite
2015-02-26 16:32:11 +08:00
@tabris17 啊?不是说多线程的么? 那单线程的话,多个请求,要排队?这样能快?
tabris17
2015-02-26 16:34:10 +08:00
@invite 请求来了开线程处理那是apache。tornado类似nodejs,reactor模式
invite
2015-02-26 16:40:35 +08:00
@tabris17 啊? 那如果我一个请求耗时比较长,那后续请求,一直在排队?
tabris17
2015-02-26 16:46:40 +08:00
@invite 耗时的运算可以开新线程或交给其他进程来处理,所有I/O接口应该使用非阻塞接口
mengskysama
2015-02-26 16:47:22 +08:00
tornodo是NIO框架,不能阻塞,不是排队的问题了,浏览器的请求是根本不会accept。
mengskysama
2015-02-26 16:49:03 +08:00
SQLite多线程同时操真不好说,还是mysql吧,推荐你用这个https://github.com/PyMySQL/Tornado-MySQL
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
2015-02-26 18:41:59 +08:00
如果不是多读少写或者开发时使用,建议不要使用Sqlite
feelapi
2015-02-26 18:54:13 +08:00
http://uri.agassi.co.il/2014/10/using-sqlite-for-production.html
看看这个,如果是只读的话,还是不错的。可以生成只读数据供前台用。
mengskysama
2015-02-26 19:39:50 +08:00
非要用sqlite的话建议把需要把同步的调用"变成"异步的,而不是开多个tornado。
建议使用future的线程池来实现,参考http://lbolla.info/blog/2013/01/22/blocking-tornado

sqlite还要有严格的读写互斥。
mathgl
2015-03-05 18:04:34 +08:00
用线程池,共享conn是没问题的。可以考虑用apsw。比标准库的好些。
sivacohan
2015-07-02 23:57:36 +08:00
SQLite官网就说了。目标是替代fopen不是替代MySQL等东西。
简单做demo可以,生产环境还是不要用了吧。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/172965

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX