V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
maga
V2EX  ›  问与答

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

  •  
  •   maga · 2014-01-24 21:25:27 +08:00 · 7908 次点击
    这是一个创建于 3974 天前的主题,其中的信息可能已经有所发展或是发生改变。
    tornado 是多进程还是多线程模型?
    有个共享资源需要加锁,不知道我用threading.Lock()是否合适。

    lock = threading.Lock()

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

    我考虑将数据放到外面了,比如数据库,redis,实现原子操作。
    senghoo
        7
    senghoo  
       2014-01-25 01:16:57 +08:00 via iPad
    @maga 对于多个请求会顺序处理。在tornado中如果产生等待某个锁就会产生死锁
    Tornado的编程模型不应该有锁存在。
    好好看看设计是否合理吧。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4811 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 05:45 · PVG 13:45 · LAX 21:45 · JFK 00:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.