python笔记8-多线程threading之封装式

前言

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

一、执行函数

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

# coding=utf-8

import threading

import time

def 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-8

import threading

import time

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)

三、 start和run区别

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

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

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

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

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

四、 参考代码

# coding=utf-8

import threading

import time

def 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("结束线程: " + self.name)

# 创建新线程

thread1 = myThread("YOYO", "Thread-1")

thread2 = myThread("xiaowang", "Thread-2")

# 开启线程

thread1.start()

thread2.start()

time.sleep(1)

print("退出主线程")

运行结果:

开始线程: Thread-1

Wed Jan 17 15:04:48 2018 吃火锅的小伙伴-羊肉:YOYO

开始线程: Thread-2

Wed Jan 17 15:04:48 2018 吃火锅的小伙伴-羊肉:xiaowang

Wed Jan 17 15:04:49 2018 吃火锅的小伙伴-鱼丸:YOYO退出主线程Wed Jan 17 15:04:49 2018 吃火锅的小伙伴-鱼丸:xiaowang

结束线程: Thread-1

结束线程: Thread-2

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

原文发布于微信公众号 - 从零开始学自动化测试(yoyoketang)

原文发表时间:2018-01-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏皮皮之路

【JDK1.8】JUC——LockSupport

9720
来自专栏滕先生的博客

runtime官方文档翻译版本通过OC源代码通过NSObject中定义的方法直接调用运行时的函数消息传递机制使用隐藏参数获取方法地址动态方法解析动态加载消息转发转发和多继承代理对象转发和继承类型编码声

29170
来自专栏黑泽君的专栏

c语言基础学习11_项目实战:IDE(集成开发环境)

============================================================================= ==...

23820
来自专栏Java 技术分享

Struts2 转换器

12820
来自专栏Golang语言社区

GO语言标准库概览

在Go语言五周系列教程的最后一部分中,我们将带领大家一起来浏览一下Go语言丰富的标准库。 Go标准库包含了大量包,提供了丰富广泛的功能特性。这里提供了概览仅仅是...

391100
来自专栏Python

python常用模块

 python常用模块 什么是模块?    常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀。    但其实i...

365110
来自专栏java思维导图

Java 10 已发布!时隔 6 月带来 109 项新特性

关键时刻,第一时间送达! 期待已久,没有跳票的 Java 10 已正式发布! ? 为了更快地迭代,以及跟进社区反馈,Java 的版本发布周期变更为了每六个月一次...

29870
来自专栏Golang语言社区

GO语言标准库概览

在Go语言五周系列教程的最后一部分中,我们将带领大家一起来浏览一下Go语言丰富的标准库。 Go标准库包含了大量包,提供了丰富广泛的功能特性。这里提供了概览仅仅是...

29040
来自专栏Android 研究

Retrofit解析5之代理设计模式

即Proxy Pattern,23种常用的面向对象软件设计模式之一。(设计模式的说法源自<设计模式>一书,原名<Design Patterns:Elements...

14630
来自专栏java学习

java基础笔记1

Java基础 | 数据库 | Android | 学习视频 | 学习资料下载 最新通知 按照我去培训机构的学习经历,给初学还有自学Java 的同学一个基本的学习...

44370

扫码关注云+社区

领取腾讯云代金券