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