maga
V2EX  ›  问与答

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

  •  
  •   maga · Jan 24, 2014 · 8452 views
    This topic created in 4491 days ago, the information mentioned may be changed or developed.
    tornado 是多进程还是多线程模型?
    有个共享资源需要加锁,不知道我用threading.Lock()是否合适。

    lock = threading.Lock()

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

    我考虑将数据放到外面了,比如数据库,redis,实现原子操作。
    senghoo
        7
    senghoo  
       Jan 25, 2014 via iPad
    @maga 对于多个请求会顺序处理。在tornado中如果产生等待某个锁就会产生死锁
    Tornado的编程模型不应该有锁存在。
    好好看看设计是否合理吧。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3246 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 130ms · UTC 13:14 · PVG 21:14 · LAX 06:14 · JFK 09:14
    ♥ Do have faith in what you're doing.