python tornado 是多进程还是多线程模型?对于请求如何加锁

2014 年 1 月 24 日
 maga
tornado 是多进程还是多线程模型?
有个共享资源需要加锁,不知道我用threading.Lock()是否合适。

lock = threading.Lock()

class GiftLogHandler(tornado.web.RequestHandler):
def get(self):
lock.acquire()
do_somethin()
lock.release()
8835 次点击
所在节点    问与答
7 条回复
binux
2014 年 1 月 24 日
这还真不一定,取决于你用的是tornado哪部分功能了。
但是一般来说,以tornado的卖点来说,是单进程模型
oldcai
2014 年 1 月 24 日
tornado似乎是单进程且单线程,更像协程,加锁说不定会死锁。
maga
2014 年 1 月 24 日
@oldcai 如果是单进程且单线程,我有个共享资源并发需要保护怎么办?
Muninn
2014 年 1 月 24 日
据说这是python最大的伤痛。。。
9hills
2014 年 1 月 24 日
@maga 如果是单进程单线程就没有共享资源问题了。。。
maga
2014 年 1 月 25 日
@9hills 对一个url, 多个请求并发访问,这算不算共资源了。

我考虑将数据放到外面了,比如数据库,redis,实现原子操作。
senghoo
2014 年 1 月 25 日
@maga 对于多个请求会顺序处理。在tornado中如果产生等待某个锁就会产生死锁
Tornado的编程模型不应该有锁存在。
好好看看设计是否合理吧。

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

https://v2ex.ih06.com/t/98258

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

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

© 2021 V2EX