簡體   English   中英

在Python中使用多線程將鎖定機制作為全局/類作用域

[英]Locking mechanism as global / class scope with multithreading in 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

要么:

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

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

沒有太大的區別。 兩種方式都可以。 但是全局變量是混亂且危險的,因此我會避免這樣做。

這兩個示例在功能上是相同的,但是在第二個示例中,您應該使用變量的“全局”定義,因為您成功修改了全局變量,並且沒有全局變量,將創建變量的本地副本(請參閱thispython全局文檔 )。

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

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

無論如何,我認為:

  • 由於簡化了變量查找(有人應該對此進行基准測試!),所以類范圍的變量將稍快一些。
  • 由於“全局”語句和污染全局范圍,因此更難以維護全局變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM