Python 的多线程(1) - 同步锁

前言 : 最近对Python赶感兴趣了, 原因是公司需求对接第三方的业务比较多,所以寻找测试资源很麻烦,每天都在各种做重复的工作。

所以就想到了用python写个小脚本来找,

为什么是Python,主要还是它和 shell 的语法 比较相似, 在linux上比较友好 。

最近正自学到多线程这块,就在这里写下来,给自己加深点影响 放个链接 python 的学习网站 Python基础学习

这里版本是Python3+ ,本人之前学的是java,所以会那java做对比了 。。。

Python3 通过两个标准库 _thread 和 threading 提供对线程的支持。 _thread 提供了低级别的、原始的线程以及一个简单的锁,它相比于 threading 模块的功能还是比较有限的。 threading 模块除了包含 _thread 模块中的所有方法外,还提供的其他方法

这里用的是 threading 模块

'''使用 threading 模块创建线程'''
import threading
import time

#建一个线程测试类,继承  threading.Thread
class ThreadingTest(threading.Thread):
    ##成员变量
    threadName=''  #线程名称
    name = ''   # 姓名
    age =0    # 年龄
    de=0  # 休眠时间 , 单位秒
    # 该类的构造方法
    def __init__(self,tn,n,a,de):
        threading.Thread.__init__(self)  # 父类的构造,不同java的语法, 这里如果不写,会报错 
        self.threadName=tn
        self.name=n
        self.age=a
        self.de=de
    #run 方法  类似java 的 run()
    def run(self):
        #定义一个字典 
        li = {'tn':self.threadName, 'n':self.name, 'a':self.age,'de':self.de}
        execue(li)
def execue(li):
    ''' 处理函数入口 '''
    count = 0
    while count<5:
        time.sleep(li['de'])
        count += 1
        con = "枪手{0},等待{1}秒--开始瞄准--名称:{2}--年龄:{3} ==== 开枪 第{4}次 \n"
        print(con.format(li['tn'],li['de'],li['n'],li['a'],count))    

# 获取类实例
tt1 = ThreadingTest("老周","张三",34,2)
tt2 = ThreadingTest("老L","李四",18,4)

# 启动线程
tt1.start()
tt2.start()
# 等待线程执行完毕
tt1.join()
tt2.join()
print("枪毙执行完成 .., 为了死的彻底,多开了几枪不要在意啦. 埋尸的事后面再说 。。。")
print('话说这里让我想到了星爷演的007 中枪毙的桥段, 毁三观啊 。。。')

执行结果 :

手Thread-1,等待2秒--开始预判--名称:张三--年龄:34 ====>执行死刑 第1次 

枪手Thread-2,等待4秒--开始预判--名称:李四--年龄:18 ====>执行死刑 第1次 

枪手Thread-1,等待2秒--开始预判--名称:张三--年龄:34 ====>执行死刑 第2次 

枪手Thread-1,等待2秒--开始预判--名称:张三--年龄:34 ====>执行死刑 第3次 

枪手Thread-2,等待4秒--开始预判--名称:李四--年龄:18 ====>执行死刑 第2次 
枪手Thread-1,等待2秒--开始预判--名称:张三--年龄:34 ====>执行死刑 第4次 


枪手Thread-1,等待2秒--开始预判--名称:张三--年龄:34 ====>执行死刑 第5次 

枪手Thread-2,等待4秒--开始预判--名称:李四--年龄:18 ====>执行死刑 第3次 

枪手Thread-2,等待4秒--开始预判--名称:李四--年龄:18 ====>执行死刑 第4次 

枪手Thread-2,等待4秒--开始预判--名称:李四--年龄:18 ====>执行死刑 第5次 

枪毙执行完成 .., 为了死的彻底,多开了几枪不要在意啦. 埋尸的事后面再说

很快天就到第二天了, 我每天的工作就是 枪毙人或动物。今天天气很好,我要上班去了

ps: 为什么会有动物呢,人总要赚点外快的嘛,不要在意这些细节了

... .

老L 是我的搭档,为什么叫他老L呢, 因为他被绿了,大家都懂的, 领导今天找我们谈话了,说让我们一个一个的执行,不要一窝蜂的就干完了,就下班了,说这样影响单位的形象,好吧,领导说的都是对的,那我们只好 照着做咯 。。,今天还是两个死刑犯: 王五,赵六; 据说一个是 人贩子, 一个是奸杀的 ,真是最该万死啊, 对这种人一般不会手软的,

嘿嘿嘿 ....,不说了,干活了

ps : 关键字

#定义一个锁
threadLock = threading.Lock()

threadLock.acquire()  #获得锁
# do something
threadLock.release()  #释放锁

看完整代码 :

'''使用 threading 模块创建线程'''
import threading
import time

#建一个线程测试类,继承 threading.Thread
class ThreadingTest(threading.Thread):
    ##成员变量
    threadName=''  #线程名称
    name = ''   # 姓名
    age =0    # 年龄
    de=0  # 休眠时间 , 单位秒
    # 该类的构造方法
    def __init__(self,tn,n,a,de):
        threading.Thread.__init__(self)  # 父类的构造,不同java的语法, 这里如果不写,会报错 
        self.threadName=tn
        self.name=n
        self.age=a
        self.de=de
    #run 方法 类似java 的 run()
    def run(self):
        #定义一个字典 
        li = {'tn':self.threadName, 'n':self.name, 'a':self.age,'de':self.de}
        #  acquire 和 release  类似 java Synchronized 关键字
        threadLock.acquire()  #获得锁
        execue(li)
        threadLock.release()  #释放锁  
def execue(li):
    ''' 处理函数入口 '''
    count = 0
    while count<5:
        time.sleep(li['de'])
        count += 1
        con = "枪手{0},等待{1}秒--开始瞄准--名称:{2}--年龄:{3} ==== 开枪 第{4}次 \n"
        print(con.format(li['tn'],li['de'],li['n'],li['a'],count))    

#定义一个锁
threadLock = threading.Lock()
 
# 获取类实例
tt1 = ThreadingTest("老周","王五",33,2)
tt2 = ThreadingTest("老L","赵六",24,3)

# 启动线程
tt1.start()
tt2.start()
# 等待线程执行完毕
tt1.join()
tt2.join()
print("枪毙执行完成 .., 为了死的彻底,多开了几枪不要在意啦. 埋尸的事后面再说 。。。")
print('话说这里让我想到了星爷演的007 中枪毙的桥段, 毁三观啊 。。。')

看执行结果 :

枪手老周,等待2秒--开始瞄准--名称:王五--年龄:33 ==== 开枪 第1次 

枪手老周,等待2秒--开始瞄准--名称:王五--年龄:33 ==== 开枪 第2次 

枪手老周,等待2秒--开始瞄准--名称:王五--年龄:33 ==== 开枪 第3次 

枪手老周,等待2秒--开始瞄准--名称:王五--年龄:33 ==== 开枪 第4次 

枪手老周,等待2秒--开始瞄准--名称:王五--年龄:33 ==== 开枪 第5次 

枪手老L,等待3秒--开始瞄准--名称:赵六--年龄:24 ==== 开枪 第1次 

枪手老L,等待3秒--开始瞄准--名称:赵六--年龄:24 ==== 开枪 第2次 

枪手老L,等待3秒--开始瞄准--名称:赵六--年龄:24 ==== 开枪 第3次 

枪手老L,等待3秒--开始瞄准--名称:赵六--年龄:24 ==== 开枪 第4次 

枪手老L,等待3秒--开始瞄准--名称:赵六--年龄:24 ==== 开枪 第5次 

枪毙执行完成 .., 为了死的彻底,多开了几枪不要在意啦. 埋尸的事后面再说 。。。
话说这里让我想到了星爷演的007 中枪毙的桥段, 毁三观啊 。。。

看到了吧, 整整齐齐的才是一家人... , 松鼠航啊松鼠航 ^**^

ps : 各位大神,如果有什么问题,请一定要指出啊 , 非常感谢 !!!

.

转载于:https://my.oschina.net/u/2322277/blog/1605518

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值