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