原因:如果多个线程共同对某个数据修改,则可能出现不可预料的结果,为了保证数据的正确性,需要对多个线程进行同步。
# 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...