Python 的多线程(1)

2018-01-12 11:15:07来源:oschina作者:老飞的天空人点击

分享

前言 :
最近对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 : 各位大神,如果有什么问题,请一定要指出啊 , 非常感谢 !!!


.

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台