Python threading Lock同步線程

原因:如果多個線程共同對某個數據修改,則可能出現不可預料的結果,爲了保證數據的正確性,需要對多個線程進行同步。

# coding=utf-8
import logging
import threading
import time

# 線程列表
threads = []
# 線程鎖
threadLock = threading.Lock()

logging.basicConfig(
    level=logging.INFO,
    format="%(asctime)s [*] %(message)s"
)


class myThread(threading.Thread):
    def __init__ (self, delay):
        threading.Thread.__init__(self)
        self.delay = delay
    
    def run (self):
        logging.info("Starting " + self.name)
        with threadLock:
            self.print_time(self.delay, 3)
        logging.info("Exiting " + self.name)
    
    def print_time (self, delay, counter):
        while counter:
            time.sleep(delay)
            logging.info(f"{self.name}")
            counter -= 1


if __name__ == '__main__':
    logging.info("starting Main Thread...")
    
    # 創建新線程----------------------------------------
    for i in range(1, 5):
        thread = myThread(i)
        threads.append(thread)
    # 開啓新線程----------------------------------------
    for t in threads:
        t.start()
    # 等待所有線程完成----------------------------------
    for t in threads:
        t.join()
    
    logging.info("Exiting Main Thread...")

輸出:

2019-10-02 01:57:15,834 [*] starting Main Thread...
2019-10-02 01:57:15,835 [*] Starting Thread-1
2019-10-02 01:57:15,835 [*] Starting Thread-2
2019-10-02 01:57:15,836 [*] Starting Thread-3
2019-10-02 01:57:15,836 [*] Starting Thread-4
2019-10-02 01:57:16,836 [*] Thread-1
2019-10-02 01:57:17,837 [*] Thread-1
2019-10-02 01:57:18,839 [*] Thread-1
2019-10-02 01:57:18,839 [*] Exiting Thread-1
2019-10-02 01:57:20,840 [*] Thread-2
2019-10-02 01:57:22,841 [*] Thread-2
2019-10-02 01:57:24,842 [*] Thread-2
2019-10-02 01:57:24,842 [*] Exiting Thread-2
2019-10-02 01:57:27,843 [*] Thread-3
2019-10-02 01:57:30,844 [*] Thread-3
2019-10-02 01:57:33,845 [*] Thread-3
2019-10-02 01:57:33,845 [*] Exiting Thread-3
2019-10-02 01:57:37,847 [*] Thread-4
2019-10-02 01:57:41,848 [*] Thread-4
2019-10-02 01:57:45,849 [*] Thread-4
2019-10-02 01:57:45,849 [*] Exiting Thread-4
2019-10-02 01:57:45,849 [*] Exiting Main Thread...
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章