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输出分别保存,就能说明问题。