1

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

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

或者:

success = 0
fails = 0
statsLock = threading.Lock()
class httpHandler(BaseHTTPRequestHandler):

    def do_POST(self):
    ...
    statsLock.acquire()
    success += 1
    statsLock.release()
    return
4

2 回答 2

0

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

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

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

无论如何,我认为:

  • 由于简化了变量查找,类作用域变量会稍微快一些(有人应该对此进行基准测试!)。
  • 由于“全局”声明和污染全局范围,全局变量更难维护。
于 2013-08-21T06:16:52.273 回答
0

没有太大区别。两种方式都会奏效。然而,全局变量是混乱和危险的,所以我会远离它。

于 2013-08-21T06:07:13.497 回答