搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
酷酷是懒虫
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
学会充分运用AI的自然语言理解能力_ai如何判案,利用自然语言能力去理解问题文本和语法
2
2020 年前端技术发展盘点_前端前沿思潮和技术
3
libcurl简介及其编程应用
4
使用ChatGPT进行SCI英文论文润色的最佳指令指南!_chatgpt润色sci
5
JDK各个版本的更新特性_javajdk更新
6
蓝桥杯欲伸手CTF?有多远爬多远_蓝桥杯ctf都需要会么
7
红队攻防渗透技术实战流程:中间件安全:IIS&NGINX&APACHE&TOMCAT
8
Selenium : error sending request for url.... 10054 问题_exception managing chrome: error sending request f
9
智慧城市中的数据力量:大数据与AI的应用
10
【Hive】如何对Hive表小文件进行合并_hive.merge.smallfiles.avgsize
当前位置:
article
> 正文
16_Python基础_Python多线程_一个类下的两个run线程 python
作者:酷酷是懒虫 | 2024-06-29 08:57:16
赞
踩
一个类下的两个run线程 python
Python多线程
当我们想让程序同时执行多个任务,则需要使用到多线程技术。
一、线程知识简介
进程
一个进程指的是一个正在执行的程序,每一个进程都有自己独立的一块内存空间,一组系统资源。在进程的概念中,每一个进程的内部数据和状态都是完全独立的。
在Windows操作系统中,一个进程就是一个exe或dll程序,它们相互独立,相互可以通信。
线程
在一个进程中可以包含多个线程,多线程共享一块内存空间和一组系统资源。所以,系统在各个线程之间进行切换时,开销要比进程小得多,正因如此,线程被称为轻量级的进程。
主线程
Python的程序中至少要有一个线程,这个就是主线程,程序在启动后由python解释器负责创建主线程,在程序结束后由Python解释器负责停止主线程。
在多线程中,主线程负责其它线程的启动、挂起、停止等操作。主线程外的其它线程称为子线程。
二、线程模块--threading
Python官方提供的threading模块可以进行多线程的编程。
threading模块中提供了线程类Thread,还提供了相关的线程操作的函数,其中常用的函数如下
active_count() 返回当前处于活动状态的线程个数
current_thread() 返回主当前Thread对象
main_thread() 返回主线程对象。主线程是Python解释器启动的线程
三、创建子线程
要创建一个可执行的子线程,需要有两个要素
1、线程对象:线程对象是threading模块的线程类Thread和Thread子类所创建的对象
2、线程体:线程体是子线程要执行的代码,这些代码会被 封装到一个函数中。子线程在启动后会执行线程体,实现线程体主要有两种方式
自定义函数实体线程体
自定义线程类实现线程体
自定义函数实现线程体
创建线程Thread对象的构造方法如下:
Thread(target=None,name=None,args=())
target参数:指向线程体函数,这个就是我们可以自定义的线程体函数
name参数:设置线程名称,如果没有指定这个参数则系统会分配一个名称
args参数:它是一个元组,为线程体函数提供的参数
# coding=utf-8
import threading
import time
# 定义线程体函数
def thread_body():
# 当前线程对象
t = threading.current_thread()
for n in range(5):
# 当前线程名
print("第{0}次执行线程【{1}】".format(n,t.name))
# 线程休眠
time.sleep(2)
print('线程【{0}】执行完成!'.format(t.name))
# 创建一个线程对象t1
t1 = threading.Thread(target=thread_body)
# 创建一个线程对象t2
t2 = threading.Thread(target=thread_body,name='线程t2')
# 启动线程t1、t2
t1.start()
t2.start()
在自定义的线程体函数中我们做了线程的休眠time.sleep(2),线程进来执行的时候会休眠两秒钟,这样创建的两个线程可以看到是交错执行的,如果我们把这个休眠除掉,则基本上会是t1执行完后再执行t2。
自定义线程类实现线程体
自定义线和类实现线程体的方式是创建一个Thread子类并重写它的run()方法,这里的run()方法就是它的线程体函数。
# coding=utf-8
import threading
import time
class MyThread(threading.Thread):
def __init__(self,name=None):
super().__init__(name=name)
# 重写run方法,线程体函数
def run(self):
# 当前线程对象
t = threading.current_thread()
for n in range(5):
# 当前线程名
print("第{0}次执行线程【{1}】".format(n,t.name))
# 线程休眠
time.sleep(2)
print('线程【{0}】执行完成'.format(t.name))
# 创建线程对象t1
t1 = MyThread()
# 创建线程对象t2
t2 = MyThread(name='线程t2')
# 启动线程t1,t2
t1.start()
t2.start()
四、线程管理
线程管理包括线程创建、线程启动、线程休眠、等待线程结束和线程停止。
等待线程结束
有时候一个线程需要等待另外一个线程执行结束后才能继续执行。
join()方法的语法如下:
join(timeout=None)
参数 timeout用于设置超时时间,单位是秒。如果没有设置timeout,则可以一直等待,直到结束。
线程停止
在线程体结束时,线程就停止了,在某些较为复杂的业务场景中,会在线程体中执行一个"死循环"。线程体是否继续执行"死循环"是通过判断停止变量实现的,当”死循环“结束则线程体结束,那么线程也就结束了。
在一般情况下,死循环会执行线程任务,然后休眠,再执行,再休眠,直到结束循环
图片下载(子线程循环进行,至到控制线程输入exit)
# coding=utf-8
import threading
import time
import urllib.request
import os
# 线程停止变量
isrun = True
# 工程线程体函数
def workthread_body():
while isrun:
# 线程开始工作
print("工作线程执行下载……")
download() # 进行下载操作
# 线程休眠
time.sleep(5)
print("工作线程停止工作")
# 控制线程函数体
def controlthread_body():
global isrun
while isrun:
# 从键盘输入停止指令
command = input("请输入停止指令:")
if command == 'exit':
isrun = False
print('控制线程结束。')
def download():
url = r'https://pic.ntimg.cn/20131008/7447430_112059179000_2.jpg'
req = urllib.request.Request(url)
with urllib.request.urlopen(req) as response:
data = response.read()
f_name = 'images/download' + str(int(time.time())) + '.jpg'
with open(f_name,'wb') as f:
f.write(data)
print("图片下载成功")
# 判断目录是否存在,不存在则创建这么一个目录
if os.path.exists("image") == False:
os.mkdir("images")
# 工作线程
workthread = threading.Thread(target=workthread_body)
workthread.start()
# 控制线程
controlthread = threading.Thread(target=controlthread_body)
controlthread.start()
声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
【wpsshop博客】
推荐阅读
article
Python----
数据
分析-使用scikit-
learn
构建模型实训(
wine
数据
集、
wine
_q...
Python----
数据
分析-使用scikit-
learn
构建模型实训(
wine
数据
集、
wine
_
quality
数据
)目...
赞
踩
article
python
机器
学习
_
Python
机器
学习
-知识点汇总...
1,什么样的资料集不适合用深度
学习
?数据集太小,数据样本不足时,深度
学习
相对其它
机器
学习
算法,没有明显优势。数据集没有局...
赞
踩
article
【
Python
】
python
创建
字典
(
dict
)的几种方法(含代码示例)_
python
创建
dict
...
【
Python
】
python
创建
字典
(
dict
)的几种方法(详细版)_
python
创建
dict
python
创建
dict
...
赞
踩
article
Python
教程:深入理解
Python
multiprocessing
.
Queue
...
在
Python
编程中,多进程编程是利用计算机多核心资源的重要手段之一。然而,多进程之间的通信却是一个相对复杂的问题。...
赞
踩
article
python
AES
加密
解密
_
python
aes
解密
...
AES
加密
解密
_
python
aes
解密
python
aes
解密
...
赞
踩
article
华为OD机试C卷
--
查找
接口
成功率
最优
时间段
(
Java
& JS &
Python
& C)...
服务之间交换的
接口
成功率
作为服务调用关键质量特性,某个
时间段
内的
接口
失败率使用一个数组表示,数组中每个元素都是单位时间内...
赞
踩
article
5
个
必须了解
的
的
Python
AI
库
_
ai
python
...
NumPy(Numerical
Python
)是
Python
编程语言
的
一
个
扩展
库
,支持大量
的
维度数组与矩阵运算,此外也针...
赞
踩
article
为
了
追到
小姐姐
,
我用
Python
制作
了
一个
机器人
...
点击上方“Air
Python
”
,
选择“置顶公众号”第一时间获取
Python
技术干货!阅读文本大概需要 15 分钟。1...
赞
踩
article
华为
OD机试C卷--
二叉树
的
广度优先
遍历
(
Java
& JS &
Python
& C)_
二叉树
的
...
有一棵
二叉树
,每个节点由一个大写字母标识(最多26个节点)。现有两组字母,分别表示后序
遍历
(左孩子->右孩子->父节点)...
赞
踩
article
python
—
matplotlib
库系列学习(二):
bar
函数(包含
xticks
、
yticks
、sa...
python
—
matplotlib
库系列学习(二):
bar
函数(包含
xticks
、
yticks
、
savefig
函数)_p...
赞
踩
article
【
华为
OD机试】
二叉树
的
广度
优先
遍历
(
二叉树
的构建和层次
遍历
—
Java
&
Python
&
C++
&JS实...
【
华为
OD机试】
二叉树
的
广度
优先
遍历
(
二叉树
的构建和层次
遍历
—
Java
&
Python
&
C++
&JS实现)有一棵
二叉树
,每...
赞
踩
article
二叉树
的
广度
优先
遍历
【华为OD机试】(
JAVA
&
Python
&C++&JS题解)_
二叉树
的
广度
优先
遍...
二叉树
的
广度
优先
遍历
【华为OD机试】(
JAVA
&
Python
&C++&JS题解)有一棵
二叉树
,每个节点由一个大写字母标识...
赞
踩
article
2024
华为
OD机试真题-
生成
哈夫曼
树
-(
C++
/
Python
)-C卷D卷-100分...
给定长度为 n 的无序的数字数组,每个数字代表二叉
树
的叶子节点的权值,数字数组的值均大于等于1。请完成一个函数,根据输入...
赞
踩
article
【免费题库】
华为
OD机试 -
生成
哈夫曼
树
(
Java
& JS &
Python
& C & C++...
## 题目描述给定长度为 n 的无序的数字数组,每个数字代表二叉
树
的叶子节点的权值,数字数组的值均大于等于1。请完成一个...
赞
踩
article
【2024最新
华为
OD
-
C
卷
试题汇总】
生成
哈夫曼
树 (100分) - 支持在线
评测
+三语言A
C
题解(...
华为
OD
的题库大半年跟新一次,也就是说,一旦跟新,那么本年用的题目就是从该题库种选题,大概有100~200道左右最近考试...
赞
踩
article
【2023华为
od
-C卷-第一题-
生成
哈夫曼
树】
100%
通过率
(JS&
Java
&
Python
&
C++
...
所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的路径长度(若根结点为。为了保证输出的二叉树中序遍历结果统...
赞
踩
article
华为OD机试C、D卷 - 生成
哈夫曼
树(
Java
& JS &
Python
& C & C++)_...
给定长度为 n 的无序的数字数组,每个数字代表二叉树的叶子节点的权值,数字数组的值均大于等于1。请完成一个函数,根据输入...
赞
踩
article
华为OD机试-
二叉
树
的中序遍历(
java
&
c
++
&
python
&
java
s
c
ript & g...
华为OD机试-
二叉
树
的中序遍历(
java
&
c
++
&
python
&
java
s
c
ript &
golang
&
c
#...
赞
踩
article
python
-KNN
分类
(1):调用
KNeighborsClassifier
()实现
_
knn
分类
调用...
KNeighborsClassifier
(): '''
KNeighborsClassifier
(n
_
neighbors...
赞
踩
article
pytho
n
-
k
近邻
分类器
-KNN_
k
n
eighbors
classifier中
n
n
eighbors
...
K近邻
分类器
,通过计算待分类数据点,与已有数据集点的所有数据点的距离。取距离最小的前K个点,根据“少数服从多数”的原则,...
赞
踩
相关标签
聚类
机器学习
数据分析
python
python 机器学习
python机器学习
机器学习 python
机器学习与知识发现
机器学习与知识发现电子书
dict字典
字典创建
开发语言
华为od
c语言
java
人工智能
宽度优先
javascript
matplotlib
学习