多线程——python进阶知识

news2024/11/25 18:49:33

多线程与多进程的区别

多线程是单个内核通过锁的手段实现同一时间运行多个程序,在某些情况下可以提升总体的运行效率。同时为了防止多个线程在对同一数据进行修改时导致的不可预测的后果,需要借助锁、队列等保证进程的同步。

多进程是多个内核执行多个任务,可以实现一时间完成多个任务,保证提升效率

python中的多线程

import threading


print(threading.active_count())   # 查看当前线程数量
print(threading.enumerate())    # 查看所有线程名称
print(threading.current_thread())    # 查看当前正在运行的线程的名词

 指定新线程内容和名称,并启动

def job():
    print("I'm a new threading!")

def main():
    my_threading = threading.Thread(target=job, name="T1")    # 定义新的线程
    my_threading.start()

if __name__ == "__main__":
    main()

join方法,把分支加入到主线程中

import time

def job2():
    for _ in range(10):
        time.sleep(0.1)
    print("I'm the second threading!")

# 合并了多个线程
def run1():
    my_threading = threading.Thread(target=job, name="T1")   
    my_threading2 = threading.Thread(target=job2, name='T2')
    my_threading.start()
    my_threading2.start()
    my_threading.join()
    my_threading2.join()
    print("Finished!",end='\n\n')
run1()

# 没有合并多个线程
def run2():
    my_threading = threading.Thread(target=job, name="T1")   
    my_threading2 = threading.Thread(target=job2, name='T2')
    my_threading.start()
    my_threading2.start()
    print("Finished!")
run2()

利用Queue队列完成多线程数据的存取

因为新线程的函数是无法使用return完成数据的返回,因此需要借助队列完成数据放入和取出操作

from queue import Queue

def job(l, q):
    """
    l: 被操作的list数据
    q:存储操作后数据的队列
    线程的工作内容,对每个list执行平方的操作
    """
    for i in range(len(l)):
        l[i] = l[i]**2
    q.put(l[i])    # 队列存放运算后的数据

def multithreading(data):
    q = Queue()
    for i in range(4):
        t = threading.Thread(target=job, args=(data[i],q))
        t.start()    # 启动线程
        t.join()    # 合并线程到主线程中
    results = []    # 存放每个线程运算的结果
    for _ in range(4):
        results.append(q.get())    # 取出队列的数据放入结果中
    print(results)

multithreading([[1,2,3], [2,3,4], [3,4,5], [4,5,6]])

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/743111.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(赠书活动第4期)编译语言的思考过程

面向对象编程(Object-Oriented Programming,简称OOP)是一种广泛应用于编程领域的编程范式,对于前端和后端开发都具有重要意义。在这篇说明中,我们将探讨面向对象编程对于前端和后端开发的重要性,并探讨其优…

【Linux指令集】---mv指令(超详细)

个人主页:平行线也会相交 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创 收录于专栏【Linux专栏】🎈 本专栏旨在分享学习Linux的一点学习心得,欢迎大家在评论区讨论💌 演示环境&#xff1…

高效工作:ADManager Plus的利器

在当今快节奏的商业环境中,高效的工作是成功的关键。对于IT管理员来说,管理和维护Active Directory(AD)环境是一项重要的任务。然而,手动处理繁琐的AD管理任务可能会占用大量的时间和精力,影响工作效率。为…

可使用Linux 测试IP和端口是否能访问,查看返回状态码

一、 使用wget判断 wget是linux下的下载工具,需要先安装. 用法: wget ip:port wget ip:port连接存在的端口 二、使用telnet判断 telnet是windows标准服务,可以直接用;如果是linux机器,需要安装telnet. 用法: telnet ip port…

【Elasticsearch】RestAPI

目录 4.RestAPI 4.0.导入Demo工程 4.0.1.导入数据 4.0.2.导入项目 4.0.3.mapping映射分析 4.0.4.初始化RestClient 4.1.创建索引库 4.1.1.代码解读 4.1.2.完整示例 4.2.删除索引库 4.3.判断索引库是否存在 4.4.总结 4.RestAPI ES官方提供了各种不同语言的客户端&…

基于vscode的ros开发

Part1前言 ROS(机器人操作系统)是一个开源的机器人软件平台,旨在提供一套通用的工具和库,帮助开发人员创建机器人应用程序。ROS提供了用于构建机器人系统的库、工具、驱动程序、通信协议和软件包管理系统。 以下是ROS的一些主要特…

第二十章:MySQL的数据目录

第二十章:MySQL的数据目录 20.1:MySQL8的主要目录结构 安装好mysql后,可以使用如下命令查看含有相关mysql的文件。 find / -name mysql # 数据库文件的存放路径 # /var/lib/mysql# mysql数据库文件 # /var/lib/mysql/mysql # /etc/logrota…

解决Material UI引入button按钮后英文字符被自动转化成全大写

目录 前言一、解决方法总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 环境&#xff1a; angularjs 1.4.3 material ui 1.1.4 问题描述 在引入<button>按钮的时候&#xff0c;带入了material 的按钮样式&#xff0c;导致了问题&#xff…

【Linux】- 常用指令和运行级别

运行级别 1.1&#x1f69e;指定运行级别1.2&#x1f68a;帮助指令1.3&#x1f694;文件目录类指令2.1 **ls 指令**2.2 **cd 指令**2.3 **mkdir 指令**2.4 **rmdir 指令**3.1 **touch 指令**3.2 **cp 指令**3.3 **rm 指令**3.4 **mv 指令**4.1 **cat 指令**4.2 **more 指令**4.3…

[QT编程系列-2]:C++图形用户界面编程,QT框架快速入门培训 - 1- 预备知识

目录 概述 1. 前置条件 1.1 C 1.2 图形界面 1.3 图形程序集成开发环境 1.4 图形程序开发框架 1.5 跨平台特性 1.6 QT快速感知 1.6.1 QT的典型应用 1.6.2 QT的特点 1.6.3 QT跨平台集成开发环境 1.6.4 QT是一种UI开发框架 1.6.5 QT的主要函数库 概述 1. 前置条件 学习…

解析三防平板在工业自动化的应用价值

三防平板作为一种具有出色性能和特殊设计的电子设备&#xff0c;为工业自动化领域带来了巨大的应用价值。采用英特尔凌动四核处理器&#xff0c;三防平板具备先进的技术与处理能力。同时配备Window 10操作系统&#xff0c;这款三防平板能够轻松执行多种任务指令。此外&#xff…

高数笔记3(第一章函数 极限 连续-极限的计算1)

目录 三、极限的计算概括&#xff08;1&#xff09;利用四则运算法则求极限常用的结论&#xff08;***&#xff09;未定式的分类以及做法&#xff08;***&#xff09;**例33 &#xff08;93 数三&#xff09;注意负无穷** &#xff08;2&#xff09;利用两个重要极限求极限&…

springboot结合疫情情况的婚恋系统

开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven…

DataFrame.pivot()--Pandas

1. 函数功能 通过指定的行、列重塑数据&#xff0c;进行行列转换 2. 函数语法 DataFrame.pivot(*, columns, indextyping.Literal[<no_default>], valuestyping.Literal[<no_default>])3. 函数参数 参数含义columns用于分组的列名&#xff0c;出现在透视表的列…

插入排序法解析

插入排序法解析 什么是插入排序法 插入排序法是一种简单但有效的排序算法&#xff0c;其基本思想是将一个待排序的元素逐个插入到已经排好序的元素序列中&#xff0c;直至所有元素都被插入完成&#xff0c;从而得到一个有序序列。 具体步骤如下&#xff1a; 假设初始时&…

EasyCVR开启强制重置密码后页面显示异常的问题优化

EasyCVR基于云边端协同架构&#xff0c;可支持多协议、多类型的海量设备接入与分发&#xff0c;平台既具备传统安防视频监控的能力&#xff0c;也具备接入AI智能分析的能力&#xff0c;在线下均有大量应用。 近期我们对EasyCVR平台的安全性进行了技术升级&#xff0c;平台将默认…

Linux:rsync

一款快速增量备份工具【Remote Sync&#xff0c;远程同步】 远程灾难备份功能 *支持本地复制&#xff0c;或者与其他SSH、rsync主机同步 配置rsync源服务器【rsync同步源】 *指备份操作的远程服务器&#xff0c;也称为备份源 web服务器本地有服务器&#xff0c;IDC机房有备…

postman每次请求前获取token并保存到环境变量

文章目录 创建一个tab&#xff0c;写上接口地址&#xff0c;json类型的参数&#xff0c;点击send&#xff0c;返回成功。 点击Environment&#xff0c;新建dev环境&#xff0c;创建token变量 编写Tests脚本 // 获取响应的token值 var responseJson pm.response?.json()…

《TCP IP网络编程》第三章

2023.7.10 第3章、地址族与数据序列 3.1 分配给套接字的IP地址与端口号 IP 是 Internet Protocol&#xff08;网络协议&#xff09;的简写&#xff0c;是为收发网络数据而分配给计算机的值。端口号并非赋予计算机的值&#xff0c;而是为了区分程序中创建的套接字而分配给套接字…

激活函数 | 神经网络

1 为什么使用激活函数&#xff08;Activation Function&#xff09; 1.数据角度&#xff1a; 由于数据是线性不可分的&#xff0c;如果采用线性化&#xff0c;那么需要复杂的线性组合去逼近问题&#xff0c;因此需要非线性变换对数据分布进行重新映射; 2.线性模型的表达力问题…