thread 模块在python3中改为_thread,网上的各种帖子都说不建议新手使用thread,好吃不好吃总得尝尝看。

 1 import _thread
 2 
 3 def print_num():
 4     for i in range(100):
 5         print(i)
 6 
 7 _thread.start_new_thread(print_num,())
 8 _thread.start_new_thread(print_num,())
 9 _thread.start_new_thread(print_num,())
10 _thread.start_new_thread(print_num,())

你猜运行结果是什么?

啥结果也没有。。。。。。因为主线程没有做任何事情直接就结束了。主线程退出的同时子线程没来得及运行就挂了,

也就是说主线成不会等待子线程执行完才退出。

下面线程锁出场了。

_thread.allocate_lock()生成一个锁,在线程函数开始的时候锁住,结束的时候解锁,主线成通过判断锁的状态决定是否退出。

 1 import _thread
 2 
 3 def print_num(lock):        #线程函数
 4     
 5     for i in range(100):
 6         print(i)
 7     lock.release()
 8 
 9 #生成5把锁
10 locks = []
11 for i in range(5):
12     lock = _thread.allocate_lock()
13     lock.acquire()
14     locks.append(lock)
15 #启动5个线程,每人一把锁
16 for i in range(len(locks)): 
17     _thread.start_new_thread(print_num,(locks[i],))
18 
19 #主线程分别监视每个锁的状态,知道所有的锁都不是锁定状态,退出
20 for i in range(len(locks)):
21     while locks[i].locked():
22         pass