python线程与进程概述_1.24

2023-11-16

多进程与多线程

进程(Process)

是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础

线程(Thread)

有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。线程是进程中的一个实体,是被系统独立调度和分派的基本单位,一个进程可以包含多个线程,但是线程不能包含多个进程。线程自己不拥有系统资源,在单个程序中同时运行多个程序完成不同的工作,称为多线程

多线程的优点:

a、使用线程可以把占据长时间的程序中的任务放到后台去处理

b、用户界面可以更加吸引人,这样,比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度

c、程序的运行速度可能加快

d、在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了

 

线程与进程的区别

线程和进程的区别在于:子进程和父进程有不同的代码和数据空间,而多个线程则共享数据空间,每个线程有自己的执行堆栈和程序计数器为其执行上下文,该上下文反映了线程上次运行该线程的CPU寄存器的状态

每个独立的进程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制

a、线程可以被抢占(中断)

b、在其他线程正在运行时,线程可以暂时搁置(也称为睡眠)—这就是线程的退让

 

python中使用线程的两种方式:函数或者用类来包装线程对象

 

一、单线程实践应用

单线程在程序执行时,所走的程序路径按照顺序排下来,前面的必须处理好,后面的才会执行

 

案例:一个学生先用2秒说话,接着用3秒写字,最后结束

from time import ctime,sleep #ctime获取当前时间,sleep是延时

#定义线程函数

def talk():

    print("Start talk %r" %ctime())

    sleep(2)

def write():

    print("Start Write! %r" %ctime())

    sleep(3)

if __name__=="__main__":

    talk()

    write()

    print("All end %r" %ctime())

 

if__name__==“__main__”:表示如果当前模块是被直接运行的,则该语句之后代码块被运行,如果模块是被导入的,则代码块不被运行

 

二、多线程实践应用

多线程(MultiThreading)是指从软件或者硬件上实现多个线程并发执行的技术

 

案例:让学生同时进行说和写的操作

from time import ctime,sleep

import threading #导入线程模块

#为线程定义函数,定义说和写的方法

def talk(content,loop): #content定义说的内容,loop定义循环的次数

    for i in range(loop):

        print("start talk %s %s" %(content,ctime()))

        sleep(3)

def write(content,loop):

    for i in range(loop):

        print("start write %s %s" %(comtent,ctime()))

        sleep(5)

threads=[] #定义一个threads,空列表

#定义加载两个线程,t1是读的线程,t2是写的线程

t1=threading.Thread(target=talk,args=('Speak:Hello,haha',2))

threads.append(t1)

t2=threading.Thread(target=write,args=('Write:life is short',2))

threads.append(t2)

#执行多线程

if __name__=='__main__':

    for t in threads:

        t.start()

    for t in threads:

        t.join()

    print("All the End %r " %ctime())

 

线程模块

python通过两个标准库thread和threading提供对线程的支持。thread提供了低级别的、原始的线程以及一个简单的锁

threading模块提供的其它方法:

threading.currentThread():返回当前的线程变量

threading.enumerate():返回一个包正在运行的线程的list。正在运行指线程启动后,结束前,不包括启动前和终止后的线程

threading.activeCount():返回正在运行的线程数量,与len(threading.enumerate())有相同的结果

 

除了使用方法外,线程模块同样提供了Thread类来处理线程,Thread类提供了一下方法:

run():用以表示线程活动的方法

start():启动线程活动

join([time]):等待至线程中止。这阻塞调用线程直至线程的join()方法被调用中止-正常退出或者抛出未处理的异常-或者是可选的超时发生

isAlive():返回线程是否活动的

getName():返回线程名

setName():设置线程名

 

三、多进程实践应用

与多线程相比,多进程就是 import multiprocessing,然后替换相应的方法multiprocessing.Process()

使用多进程的例子

from time import ctime,sleep

import multiprocessing

#定义两个方法的说和写

def talk(content,loop):

    for i in range(loop):

        print("talk:%s %s" %(content,ctime()))

        sleep(2)

 

def write(content,loop):

    for i in range(loop):

        print("write:%s %s" %(content,ctime()))

        sleep(3)

#定义两个进程

process=[]

p1=multiprocessing.Process(target=talk,args=('Python',2))

process.append(p1)

 

p2=multiprocessing.Process(target=write,args=('hello',2))

process.append(p2)

 

#调用进程

if__name__='__main__'

    for p in process:

        p.start()

    for p in process:

        p.join()

        print("all process in run! %s" %ctime())

 

 

四、相关延伸

进程间通信IPC(Interprocess communication)

线程锁、进程锁

生命周期

进程调度

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python线程与进程概述_1.24 的相关文章

  • Python游戏开发 unit05_Pygame物体移动和边界碰撞

    一 移动的本质 物体的位置变化 其实是坐标的变化 循环一次 刷新画布 重新绘制 二 边界的碰撞反弹 左边 x lt 0 右边 x gt 窗口宽度 物体宽度 上边 y lt 0 下边 y gt 窗口高度 物体高度 三 完整代码演示 impor
  • Python3-基础- 包、闭包

    包 包 包是模块的一种形式 包的本质就是含有 py文件的文件夹 模块 模块就是封装好的具有特定功能的函数代码 例如sum 求和函数 py文件的两种功能 1 脚本 一个文件就是完整的程序 用来直接执行 2 模块 一个文件中存放的某些功能函数
  • centos7安装python3及问题解决

    centos7安装python3及问题解决 Centos7中默认的Python版本为2 7 在2020年python官方将不再支持2 7版本的python 所以使用3 x版本的python是必要的 下载地址 https www python
  • Python3 中 bytes 和 string 之间的互相转换

    因为这是原来不知道 Markdown 时写的文章 富文本编辑器不知道怎么用脚注 所以参考资料显得有些孤立了 见谅 Table of Contents 前言 创建 bytes 型数据 创建字符串 相互转换 string to bytes 按
  • Python3之优化邮件中发送HTMLTestRunner生成的报告加附件

    系列文章目录 提示 这里可以添加系列文章的所有文章的目录 目录需要自己手动添加 例如 第一章 Python 机器学习入门之pandas的使用 提示 写完文章后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 系列文章目录 前言 一
  • 【Python 1-14】Python手把手教程之——详解函数的高级用法

    作者 弗拉德 来源 弗拉德 公众号 fulade me 传递列表 你经常会发现 向函数传递列表很有用 这种列表包含的可能是名字 数字或更复杂的对象 如字典 将列表传递给函数后 函数就能直接访问其内容 下面使用函数来提高处理列表的效率 假设有
  • selenium webdriver 开启网页失败,被发现为爬虫,的解决办法

    1 换用火狐浏览器 2 隐藏谷歌浏览器中的特殊变量值 from selenium import webdriver options webdriver ChromeOptions 防止被检测 旧版本用法 1 chrome在79版之前用这个
  • 【2019.05】JS逆向——破解百度翻译参数(sign)爬虫 超级详细

    有时间了打算把有道 百度 Google翻译都搞一遍 填坑百度翻译 这篇与有道那篇操作基本一致 有可能写的没有那篇清楚 大家也可以观摩一下上一篇 2019 05 JS逆向 破解有道翻译爬虫参数 sign 一 分析请求参数 打开地址 https
  • ERROR: No matching distribution found for Django 报错解决

    ERROR No matching distribution found for Django 报错解决 今天安装一个 python 依赖时 执行 pip install r requirements txt后 界面出现ERROR No m
  • python-6-for循环及格式化输出format三种用法

    前言 循环我们前面讲过了无限循环 那么for循环属于什么循环呢 显然就是有限循环 另外格式化输出我们前面也讲过 但是format也能做到不一样的格式化输出 一起看看吧 一 for 循环 1 for 有限循环 for 有限循环 s 123as
  • pycharm所有版本 http://www.jetbrains.com/pycharm/download/previous.html 打开激活窗口 选择 Activate new license

    pycharm所有版本 http www jetbrains com pycharm download previous html 打开激活窗口 选择 Activate new license with License server 用li
  • Python3之基本数据类型总结

    日期 2019年12月15日 作者 Commas 注释 学习就是为了忘记 总结一下python3的基本数据类型相关的知识 如果您想了解更多有关Python的知识 那么请点 我的Python目录 文章目录 一 变量在内存中的存储 二 内置函数
  • python连接clickhouse使用方法

    前沿 clickhouse现在作为分布式存储成熟的解决方案 在python开发中经常会用到clickhouse的连接方案 下面所列一个简单的连接clickhouse的写法 正文 from clickhouse driver import C
  • 总结12个python代码

    python有很好的可读性和简洁性 学会其中的小的技巧 运用的恰当 会让我们的工作事半功倍 以下是我总结的12个小的程序段 看似非常的简单 但是却非常的有技巧性 并且对个人的编程能力是一个很好的检验 大家应该在日常的编程中多多使用 多多练习
  • python3 Excel转txt

    使用场景 每次都是点一下Excel表格链接 调到浏览器中 内容数据也多 这种机械的活 对于程序员来说 能省则省 最后的结果 附上代码 coding utf 8 Time 2018 7 19 19 47 Author 蛇崽 Email 643
  • python3 sys.argv.py

    模块 01 sys argv py 功能 获取命令行参数 参考 https www runoob com python3 python3 command line arguments html 命令行 python 01 sys argv
  • Python3之爬虫----retrying模块的使用和处理cookie相关的请求

    1 1 设使用超时参数 requests get url headers headers timeout 3 设置超时参数 若url在三秒内未得到响应 报错 1 2 retrying模块的使用 第三方模块 from retrying imp
  • Python 一篇入门

    目录 Python 的简介与特点 Python支持多种编程风格 解释运行 跨平台 可扩展强 可嵌入 丰富的库 Python版本选择 Python开发环境搭建 认识Python解释器 快速入门 变量和赋值 动态类型 变量命名规则 认识 数字
  • python3 hashlib库sha256、pbkdf2_hmac、blake2b基本用法

    hashlib sha256 import hashlib x hashlib sha256 x update b asd print x 1 x hexdigest x hashlib sha256 x update asd encode
  • Python3 configparse模块(配置)

    Python3 configparse模块 配置 参考 https www cnblogs com bert227 p 9326313 html https www cnblogs com dion 90 p 7978081 html py

随机推荐

  • 命令行操作MySQL - 调整列的完整性约束

    这是命令行操作MySQL数据库系列博客的第十一篇 今天这篇博客记录如何 调整列的完整性约束 调整 主键 外键 非空 唯一 自增长和默认值约束 一 主键PK 外键FK和 唯一键UK 查询键的别名 show index 或 keys from
  • 关系型数据库连接表的几种方式

    一 SQL 左外连接 右外连接 全连接 内连接 内连接 a表 id name 1 张3 2 李四 3 王武 b表 id job parent id 1 23 1 2 34 2 3 34 4 a id同parent id 存在关系 内连接 i
  • 设置最小值_allegro软件的绝对传输延迟是什么,绝对传输延迟应该怎么设置呢...

    标题 allegro软件的绝对传输延迟是什么 绝对传输延迟应该怎么设置呢 我们在用allegro进行PCB设计完成以后 都需要对一组传输的总线进行时序等长 在做时序等长的时候 分为绝对传输延迟与相对传输延迟 绝对传输延迟 顾名思义 信号传输
  • 洛谷 P1026 [NOIP2001 提高组] 统计单词个数

    题目描述 给出一个长度不超过 200 的由小写英文字母组成的字母串 该字串以每行 20 个字母的方式输入 且保证每行一定为 20 个 要求将此字母串分成 k 份 且每份中包含的单词个数加起来总数最大 每份中包含的单词可以部分重叠 当选用一个
  • 从图片中完整切除圆形物体 opencv+python

    面临一个任务就是要图片中的圆形物体切出来 然后做异常点检测 就是看那些圆形物体是异常点 因为异常点检测的方法还在摸索 现在就先把从图片中把圆形物体完整切出的方法写出来 1 首先图片是这样的 圆形物体非常多 2 接下来就是代码部分 impor
  • Pycharm中的常用快捷方式

    最重要的快捷键 ctrl shift A 万能命令行 shift两次 查看资源文件 新建工程第一步操作 module设置把空包分层去掉 compact empty middle package 设置当前的工程是utf 8 设置的Editor
  • 关于OCA,OCP,OCM认证的的区别

    可能大家知道OCA OCP OCM的关系是一个比一个难考 一个比一个含金量高 但是你知道具体的考试科目 考试方式 就业形势区别吗 不知道的话这篇通俗易懂的文章会让你一目了然 区别一 含金量 OCA 数据库专业人员踏上Oracle数据库认证之
  • MySQL数据库入门超级详细教程

    文章目录 MySQL 1 数据库软件安装 2 为什么要用数据库 3 什么是数据库 4 数据库管理系统 DBMS 5 MySQL 介绍 6 SQL 6 1 SQL 语句概述 6 2 SQL 基本操作 7 表结构操作 7 1 创建数据表 7 2
  • Windows10系统下彻底删除卸载MySQL

    本文介绍 在Windows10系统下 如何彻底删除卸载MySQL 1 停止MySQL服务 开始 所有应用 Windows管理工具 服务 将MySQL服务停止 2 卸载mysql server 控制面板 所有控制面板项 程序和功能 将mysq
  • vscode+Electron环境搭建 helloword

    0 Electron是什么简介 Electron 简单来说就是一个基于Chrome Nodejs的容器 可以用纯前端的方式实现跨平台的桌面应用开发 代码由js css html构成 它支持把整个项目编译成exe 由于它支持Nodejs 所以
  • sqli-labs(22)

    接下里我们进入第二二关 好像和第21关一样 cookie的base64加密注入 闭合变成了双引号而已 0X01 构造语句进行尝试 union select 1 2 3 IiB1bmlvbiBzZWxlY3QgMSwyLDMj 嘿嘿 好像成功
  • 我的世界超富的java种子_《我的世界》最富有的四个种子,第一名有4个村庄,这科学吗?...

    原标题 我的世界 最富有的四个种子 第一名有4个村庄 这科学吗 投胎是一项技术活 这个定律在Minecraft同样适用 好的出生点意味着好的开始 但不是人人都有这种运气 没关系 有种子嘛 Seed 382686119982684279 出生
  • Unity 改变鼠标指针的方法

    在网上查的帖子 先看一下 Texture2D ClickedCursorImg 把鼠标指针改为ClickedCursorImg Cursor SetCursor ClickedCursorImg Vector2 zero CursorMod
  • Api Savior 文档生成 idea 插件进阶教程

    原文地址见 Github Wiki Spring MVC 注解支持表 注解 注解字段 是否支持 作用描述 备注 RequestMapping value path 支持 绑定一个或多个 url RequestMapping method 支
  • JetBrains系列--工具使用方法

    JetBrains系列 工具使用方法 介绍 常用IDE 2 1 IDEA 2 2 pycharm 2 3 goland 2 4 clion 3 快捷方式 4 说明 JetBrains系列 工具使用方法 介绍 JetBrains 系列IDE是
  • 如何在Vue项目中给路由跳转加上进度条

    在平常浏览网页时 我们会注意到在有的网站中 当点击页面中的链接进行路由跳转时 页面顶部会有一个进度条 用来标示页面跳转的进度 如下图所示 虽然实际用处不大 但是对用户来说 有个进度条会大大减轻用户的等待压力 提升用户体验 本篇文章就来教你如
  • 程序员口中常说的API是什么意思?什么是API?

    什么是API 我的回答 API 应用程序编程接口 一般来说 这是一套明确定义的各种软件组件之间的通信方法 什么是API 我们不妨用一个小故事展示出来 研发人员A开发了软件A 研发人员B正在研发软件B 有一天 研发人员B想要调用软件A的部分功
  • Xilinx Vivado .coe文件生成

    一 COE格式文件生成 由于Quartus ii软件ROM用的是mif格式的文件 且可以用软件Guagle wave生成正弦波 三角波 锯齿波 我们可以利用这个软件先生成数据 然后再将其转化为符合COE格式的文件 具体请参考以下步骤 1 先
  • JavaWeb中如何将JSP文件的编码格式修改为UTF-8

    目录 一 修改原因 二 修改步骤 在使用eclipse学习jsp时 很多默认的编码都是ISO 8859 15 而我们需要使用的是utf 8编码 我们第一个接触改变jsp编码的方式可能都是在需要修改的jsp中修改 如下 将charset与pa
  • python线程与进程概述_1.24

    多进程与多线程 进程 Process 是计算机中的程序关于某数据集合上的一次运行活动 是系统进行资源分配和调度的基本单位 是操作系统结构的基础 线程 Thread 有时被称为轻量级进程 Lightweight Process LWP 是程序