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

2014-01-24 21:25:27 +08:00
 maga
tornado 是多进程还是多线程模型?
有个共享资源需要加锁,不知道我用threading.Lock()是否合适。

lock = threading.Lock()

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

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

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

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

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

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

© 2021 V2EX