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