使用锁机制和变量作为全局(外部类作用域)或类变量(在问题中声明)有什么区别? 如:
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
答案 0 :(得分:0)
没有太大区别。两种方式都有效。然而,全球是messy and dangerous所以我会远离那个。
答案 1 :(得分:0)
两个示例在功能上都相同,但您应该在第二个示例中使用变量的“全局”定义,因为您修改全局变量成功而没有全局变量,将创建变量的本地副本(请参阅this或python global documentation)。
def do_POST(self):
...
global success, fails, statsLock
statsLock.acquire()
success += 1 # THIS DOES NOT WORK WITHOUT GLOBAL
statsLock.release()
return
无论如何,我认为: