本文实例讲述了Python多线程编程之多线程加锁操作。分享给大家供大家参考,具体如下:
Python语言本身是支持多线程的,不像PHP语言。
下面的例子是多个线程做同一批任务,任务总是有task_num个,每次线程做一个任务(print),做完后继续取任务,直到所有任务完成为止。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
# -*- coding:utf-8 -*-
#! python2
import threading
start_task = 0
task_num = 10000
mu = threading.Lock() ###通过工厂方法获取一个新的锁对象
class MyThread(threading.Thread): ###类MyThread继承基类threading.Thread
def run( self ): ##线程启动的入口函数,子类需重写
global start_task
global mu
global start_task
while start_task < task_num: ##如果任务没有完成,则继续
if mu.acquire(): ##加锁
if start_task < task_num:
print start_task
start_task = start_task + 1
mu.release() ##释放锁
def test():
thread_all = []
for i in range ( 6 ): ##for循环创建6个线程
t = MyThread() ##创建线程
thread_all.append(t)
t.start() ###启动线程
for i in range ( 6 ):
thread_all[i].join() ##等待线程结束
if __name__ = = "__main__" :
test()
|
运行上述代码,则输出1~9999
测试加锁与不加锁效果:将任务数设置为1千万或者以上,在多核机器上将print输出分别保存,就能说明问题。
希望本文所述对大家Python程序设计有所帮助。
原文链接:https://www.cnblogs.com/xudong-bupt/p/4830895.html