博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python笔记8-多线程threading之封装式
阅读量:6253 次
发布时间:2019-06-22

本文共 2251 字,大约阅读时间需要 7 分钟。

前言

冬天到了,小伙伴们最喜欢和好朋友一起吃火锅了,那么这种多个人同时吃火锅的场景如何用python实现呢?

执行函数

1.先写一个执行函数,用来实现做某件事情,不同的人吃火锅用一个参数people代替。

# coding=utf-8import threadingimport timedef chiHuoGuo(people):    print("%s 吃火锅的小伙伴-羊肉:%s" % (time.ctime(),people))    time.sleep(1)    print("%s 吃火锅的小伙伴-鱼丸:%s" % (time.ctime(),people))

重写threading.Thread

1.使用Threading模块创建线程,直接从threading.Thread继承,然后重写__init__方法和run方法

# coding=utf-8import threadingimport timeclass myThread (threading.Thread):   # 继承父类threading.Thread    def __init__(self, people, name):        '''重写threading.Thread初始化内容'''        threading.Thread.__init__(self)        self.threadName = name        self.people = people    def run(self):   # 把要执行的代码写到run函数里面 线程在创建后会直接运行run函数        '''重写run方法'''        print("开始线程: " + self.threadName)        chiHuoGuo(self.people)     # 执行任务        print("qq交流群:226296743")        print("结束线程: " + self.name)

1070438-20180117161732334-773420029.png

start和run区别

1.start()方法 开始线程活动。

对每一个线程对象来说它只能被调用一次,它安排对象在一个另外的单独线程中调用run()方法(而非当前所处线程)。

当该方法在同一个线程对象中被调用超过一次时,会引入RuntimeError(运行时错误)。

2.run()方法 代表了线程活动的方法。

你可以在子类中重写此方法。标准run()方法调用了传递给对象的构造函数的可调对象作为目标参数,如果有这样的参数的话,顺序和关键字参数分别从args和kargs取得

参考代码

# coding=utf-8import threadingimport timedef chiHuoGuo(people):    print("%s 吃火锅的小伙伴-羊肉:%s" % (time.ctime(),people))    time.sleep(1)    print("%s 吃火锅的小伙伴-鱼丸:%s" % (time.ctime(),people))class myThread (threading.Thread):   # 继承父类threading.Thread    def __init__(self, people, name):        '''重写threading.Thread初始化内容'''        threading.Thread.__init__(self)        self.threadName = name        self.people = people    def run(self):   # 把要执行的代码写到run函数里面 线程在创建后会直接运行run函数        '''重写run方法'''        print("开始线程: " + self.threadName)        chiHuoGuo(self.people)     # 执行任务        print("qq交流群:226296743")        print("结束线程: " + self.name)# 创建新线程thread1 = myThread("xiaoming", "Thread-1")thread2 = myThread("xiaowang", "Thread-2")# 开启线程thread1.start()thread2.start()time.sleep(0.5)print("退出主线程")

运行结果:

开始线程: Thread-1Wed Jan 17 16:33:44 2018 吃火锅的小伙伴-羊肉:xiaoming开始线程: Thread-2Wed Jan 17 16:33:44 2018 吃火锅的小伙伴-羊肉:xiaowang退出主线程Wed Jan 17 16:33:45 2018 吃火锅的小伙伴-鱼丸:xiaomingWed Jan 17 16:33:45 2018 吃火锅的小伙伴-鱼丸:xiaowangqq交流群:226296743qq交流群:226296743结束线程: Thread-1结束线程: Thread-2

备注:这里运行结果会有个问题,主线程已经退出了,子线程Thread-1和Thread-2还在跑。这就是后面需要讲的守护线程了。。。

转载地址:http://znysa.baihongyu.com/

你可能感兴趣的文章
IDEA中使用Maven创建Java Web项目
查看>>
2017.12.25
查看>>
react--1.创建项目
查看>>
11月20日学习内容整理:jquery插件
查看>>
预科班第四次考核总结
查看>>
html
查看>>
数据分析师到底在做什么?
查看>>
pt-heartbeat工具监控MySQL复制延迟
查看>>
指尖下的js —— 多触式web前端开发之三:处理复杂手势(转)
查看>>
spring boot项目配置文件集合
查看>>
cube-ui的用法
查看>>
2015.4.21 SetWindowPos函数用法
查看>>
2011-12-14 调用cmd并获得输入输出+网络访问
查看>>
TCP定时器详解
查看>>
if判断,switch语句
查看>>
Arduino入门之前
查看>>
zoj 1904 Beavergnaw 计算圆柱和圆台的体积
查看>>
整理了一份招PHP高级工程师的面试题(转)
查看>>
学习Raft算法的笔记
查看>>
第十一周编程总结
查看>>