Python多线程编程之多线程加锁详解编程语言

Python语言本身是支持多线程的,不像PHP语言。

下面的例子是多个线程做同一批任务,任务总是有task_num个,每次线程做一个任务(print),做完后继续取任务,直到所有任务完成为止。

 1 #coding:utf-8 
 2 import threading 
 3  
 4 start_task = 0 
 5 task_num = 10000 
 6 mu = threading.Lock()   ###通过工厂方法获取一个新的锁对象 
 7  
 8 class MyThread(threading.Thread):   ###类MyThread继承基类threading.Thread 
 9  
10     def run(self):  ##线程启动的入口函数,子类需重写 
11         global start_task 
12         global mu 
13         global start_task 
14  
15         while start_task < task_num:    ##如果任务没有完成,则继续 
16             if mu.acquire():    ##加锁 
17                 if start_task < task_num: 
18                     print start_task 
19                     start_task = start_task + 1 
20                 mu.release()    ##释放锁 
21  
22 def test(): 
23     thread_all = [] 
24     for i in range(6):  ##for循环创建6个线程 
25         t = MyThread()  ##创建线程 
26         thread_all.append(t) 
27         t.start()   ###启动线程 
28  
29     for i in range(6): 
30         thread_all[i].join()    ##等待线程结束 
31  
32 if __name__ == "__main__": 
33     test()

 

测试加锁与不加锁效果:将任务数设置为1千万或者以上,在多核机器上将print输出分别保存,就能说明问题。

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/11622.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论