Python中多线程作为全局/类作用域的锁定机制

2024-09-26 18:02:25 发布

您现在位置:Python中文网/ 问答频道 /正文

使用锁机制和变量作为全局变量(在类范围之外)或类变量(在问题中声明)之间有什么区别? 例如:

class httpHandler(BaseHTTPRequestHandler):
    success = 0
    fails = 0
    statsLock = threading.Lock()
    def do_POST(self):
    ...
    httpHandler.statsLock.acquire()
    httpHandler.success += 1
    self.statsLock.release()
    return

或者:

^{pr2}$

Tags: selflock声明defdo机制classsuccess
2条回答

这两个示例在功能上是相同的,但是您应该在第二个示例中使用变量的“global”定义,因为您修改了全局变量success,并且没有全局的,将创建变量的本地副本(参见thispython global documentation)。在

def do_POST(self):
...
global success, fails, statsLock

statsLock.acquire()
success += 1    # THIS DOES NOT WORK WITHOUT GLOBAL
statsLock.release()
return

总之,我认为:

  • 由于简化了变量查找(应该有人对此进行基准测试!),类范围内的变量将稍快一些。在
  • 由于“全球”声明和污染全球范围,全球变量更难维持。在

没什么区别。两种方法都有效。但是,全局变量是messy and dangerous,所以我将远离它。在

相关问题 更多 >

    热门问题