python进程和线程学习笔记

【Python】 进程与线程 在计算机操作系统中,进程是资源分配和调度的基本单位。每个进程都有自己独立的内存空间、代码执行上下文以及系统资源,如文件描述符、网络连接等。进程之间相互隔离,一个进程的崩溃通常不会影响到其他进程。 在 Python 中,多进程编程允许我们充分利用多核处理器的优势,并行地执行多个任务,从而提高程序的执行效率和响应速度。例如,在处理大规模数据计算、网络爬虫的并发请求、图像处理等任务时,多进程可以显著缩短执行时间。 阅读详情

线程是最小的执行单元,而进程由至少一个线程组成。如何调度进程和线程,完全由操作系统决定,程序自己不能决定什么时候执行,执行多长时间。

多进程和多线程的程序涉及到同步、数据共享的问题,编写起来更复杂。

进程

  • 子进程调用getppid()可以拿到父进程的ID。

  • multiprocessing模块就是跨平台版本的多进程模块。multiprocessing模块提供了一个Process类来代表一个进程对象。from multiprocessing import Process

  • 创建子进程时,只需要传入一个执行函数和函数的参数,创建一个Process实例,用start()方法启动,这样创建进程比fork()还要简单。

  • join()方法可以等待子进程结束后再继续往下运行,通常用于进程间的同步。

  • 对Pool对象调用join()方法会等待所有子进程执行完毕,调用join()之前必须先调用close(),调用close()之后就不能继续添加新的Process了。

  • Pool的默认大小:p = Pool(5)默认大小为5。

  • subprocess模块可以让我们非常方便地启动一个子进程,然后控制其输入和输出。

  • communicate()方法输入。

  • Python的multiprocessing模块包装了底层的机制,提供了Queue、Pipes等多种方式来交换数据。

  • 由于Windows没有fork调用,因此,multiprocessing需要“模拟”出fork的效果,父进程所有Python对象都必须通过pickle序列化再传到子进程去,所有,如果multiprocessing在Windows下调用失败了,要先考虑是不是pickle失败了。

  • 小结:
    在Unix/Linux下,可以使用fork()调用实现多进程。

    要实现跨平台的多进程,可以使用multiprocessing模块。

    进程间通信是通过Queue、Pipes等实现的。

线程

_thread和threading(常用),_thread是低级模块,threading是高级模块,对_thread进行了封装。

  • Python的threading模块有个current_thread()函数,它永远返回当前线程的实例。

  • 多线程和多进程最大的不同在于,多进程中,同一个变量,各自有一份拷贝存在于每个进程中,互不影响,而多线程中,所有变量都由所有线程共享。线程之间共享数据最大的危险在于多个线程同时改一个变量,把内容给改乱了。

  • Python解释器由于设计时有GIL全局锁,导致了多线程无法利用多核。多线程的并发在Python中就是一个美丽的梦。

python-进程和线程 进程: 一个程序的执行实例就是一个进程,表现为程序是源代码编译后的文件,而这些文件存放在磁盘上。当程序被操作系统加载到内存中,就是进程。 进程中存放着指令和数据(资源),它也是线程的容器。 进程( Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。 Linux进程有父进程、子进程,Windows的进程是平等关系 线程: 线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运行单位。 线程,有时被称为轻量级进程 阅读详情

相关推荐

linux下用fork()函数实现多进程调用带来的一些思考

在文档中针对一事例程序进行了分析讲解。该事例程序属多进程调用小程序,采用了系统调用函数fork()进行子进程的调用。在该文档中介绍了fork()调用的相关细节及注意点以及父子进程段的关系。并将程序运行后输出到屏幕结果与输出重定向到文件后的结果进行比较分析,给出了存在差异的原因,这里主要涉及到了printf()输出缓冲机制问题。并在分析基础上给出了解决办法。

详解Python进程与线程

另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。CPU的时间片轮转,在不同的时间段切换执行不同的进程,但是切换进程是比较耗时的;就引来了轻量级进程,也就是所谓的线程,一个进程中包括多个线程(代码流,其实也就是进程中同时跑的多个方法体)当一个程序启动时,就有一个进程被操作系统(OS)创建,与此同时一个线程也立刻运行,该线程通常叫做程序的主线程。

黑马程序员官方博客 3159

Proteus课设原理图及报告

1. I/O 口:32 个可编程 I/O 引脚,分成 4 个并行 I/O 端口 (P0, P1, P2, P3),P0 功能段选 a、b、c、d、e、f、g、dp 使其中部分点亮,P2 功能为位选 1、2、4.按键操作分析:P3.0-设置时钟的时间,P3.1-确定更改的时钟时间,P3.2-对。时钟设置标志 0 不设置,1 设置时,2 设置分,3 设置秒。P3.0 按下的次数对应 不设置,设置时,设置分,

2303_76688805的博客 1175

python中的进程与线程

python进程和线程

HBT036017的博客 2046

深度学习入门:使用CMSIS-NN在微控制器上部署模型的完整指南与Python Jupyter实践

CMSIS-NN是ARM为Cortex-M系列微控制器设计的神经网络库。它旨在提供一套高效、轻量级的神经网络API,使得开发者可以在资源受限的微控制器上运行深度学习模型。CMSIS-NN优化了各种常见的神经网络层,如卷积层、全连接层等,确保它们在微控制器上的运行效率。# 定义模型])# 编译模型# 训练模型这样,我们就得到了一个简单的手写数字识别模型。注意:为了简洁和清晰,本文中的代码可能不是最优的或最完整的实现。为了获得完整的项目和更多的优化技巧,请下载完整项目。

m0_57781768的博客 5883

OpenCV2.4.9+vs2012配置

下载OpenCV2.4.9。 下载地址:http://opencv.org/downloads.html2.下载后,解压。 请记住解压路径,后面根据自己的解压路径进行配置。我的路径是E:\ 3.配置环境变量 win7系统:(计算机-属性-高级系统设置-高级-环境变量) 1)编辑系统变量Path:添加E:\opencv\build\x86\vc11\bin; 2)添加/编辑用户变量P

sybil_w的博客 970

深入理解Python中的进程与线程

今天我们使用的计算机早已进入多CPU或多核时代,而我们使用的操作系统都是支持“多任务”的操作系统,这使得我们可以同时运行多个程序,也可以将一个程序分解为若干个相对独立的子任务,让多个子任务并发的执行,从而缩短程序的执行时间,同时也让用户获得更好的体验。因此在当下不管是用什么编程语言进行开发,实现让程序同时执行多个任务也就是常说的“并发编程”,应该是程序员必备技能之一。为此,我们需要先讨论两个概念,一个叫进程,一个叫线程。

weixin_45841831的博客 1305

在 SAP BTP Cloud Foundry 环境中开发 SAP HANA 的完整实战路线图

SAP HANA Cloud迁移路径解析:从本地到云原生的数据库现代化 本文梳理了SAP HANA在Cloud Foundry环境中的架构定位和实施路径,针对不同起点的项目提供迁移建议。核心内容包括: SAP HANA Cloud在Cloud Foundry中的双重角色:既作为平台服务提供数据库实例,又通过HDI容器管理MTA应用中的数据库工件。 针对四类典型项目起点的迁移策略: 绿地项目:直接采用CAP+SAP HANA Cloud组合 已有HANA service或XS advanced项目:需对照兼容

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 265

python学习笔记进程和线程

在创建了一个进程以后它内部还会继续创建一个线程(进程是创造工作场地,线程是打工仔)当你运行一个程序的时候程序就会创建一个进程,而进程里(工厂)面内部创建了一个线程。需要注意的是,并不是所有的操作都是线程安全的。中的进程是独立运行单位,不受其他进程的影响,而线程不能独立运行必须依存在应。中的进程能独立运行,父进程和子进程都有各自独立的数据空间和代码,进程数据。可以提高性能,因为它可以防止多个线程同时运行,从而减少了线程切换的开。可以避免死锁,因为它可以防止多个线程同时运行,从而避免了线程之间的竞。

ehend的博客 1197

Open3D 基于法线的双边滤波

基于法线的双边滤波是一种用于点云平滑的技术,它结合了点与其邻域点之间的几何距离和法线方向的相似性,从而在去除噪声的同时保留几何特征。这种滤波方法广泛应用于点云处理领域,尤其是在需要保留表面细节和边缘的场景中。

纵马踏花向自由 2500

MIKE水动力笔记2_水动力基础理论知识

本文所讲内容是水动力基础理论知识,所参考的主要书籍是《水动力学和水质》(第二版,季振刚著,海洋出版社)。

晏长街的博客 1万+

Python学习笔记——进程和线程

http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014319272686365ec7ceaeca33428c914edf8f70cca383000 继续学习,接下来是进程和线程。 1.

Coding a Life 4227

诊断测试工具CANoe.DiVa从入门到精通系列——开门见山

### 工具主要用于测试ECU的诊断功能。关于自动化诊断测试可以分为如下内容: ### -> 1、根据诊断需求规范进行cdd文件的编辑(现阶段主要是诊断问卷调查表); ### -> 2、新建Diva工程,导入对应的诊断数据库文件生成测试用例; ### -> 3、新建CANoe工程,导入CANoe.DiVa生成的Diva工程; ### -> 4、根据测试报告进行错误处理。

Soly_kun的博客 3547

python学习笔记 进程和线程

对于操作系统来说,一个任务就是一个进程(Process),比如打开一个浏览器就是启动一个浏览器进程,打开一个记事本就启动了一个记事本进程,打开两个记事本就启动了两个记事本进程,打开一个Word就启动了一个Word进程。 有些进程还不止同时干一件事,比如Word,它可以同时进行打字、拼写检查、打印等事情。在一个进程内部,要同时干多件事,就需要同时运行多个“子任务”,我们把进程内的这些“子任务”

littlecushion000的博客 377

解决com.alibaba.druid.pool.GetConnectionTimeoutException: wait millis 60027, active 20, maxActive 20错误

全网详细解决com.alibaba.druid.pool.GetConnectionTimeoutException: wait millis 60027, active 20, maxActive 20, creating 0, createErrorCount 24的错误

念兮为美 417

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

【Python】Python学习笔记-进程和线程

本文系统阐述了并发与并行、同步与异步、进程与线程的核心概念,解析了多进程编程中Process的创建与控制机制。重点介绍了multiprocessing模块的使用方法,包括进程参数配置、主子进程关系、进程锁(Lock)的应用及if __name__ == '__main__'的必要性,强调了在多进程环境下资源竞争与数据安全的处理策略,为高效实现多任务并行处理提供了理论基础与实践指导。

C/C++软件工程师、嵌入式软件工程师、物联网研发工程师、C/C++讲师、物联网讲师、嵌入式讲师、鸿蒙讲师---欢迎大家一起交流(私信添加博主微信) 190

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

python进程和线程是什么_python学习笔记 | Python中的线程与进程简介

近日,我开始对代码的各个部分进行计时,以了解我是否可以加快速度。令我惊讶的是,我发现数据增强是最大的瓶颈。我使用的方法:旋转,翻转,缩放。依靠Numpy并在CPU上运行。Numpy在某些情况下使用并行处理,而Pytorch的数据加载器也是如此,但我一次运行3-5个实验,每个实验都在做自己的增强。这似乎效率低下,我很好奇,看看我能否通过并行处理来加快速度。什么是并行处理?基本上可以同时做两件事情,既...

weixin_39768083的博客 142

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

python进程和线程的优缺点_Python学习笔记__10章 进程和线程

# 这是学习廖雪峰老师python教程的学习笔记1、概览现代操作系统比如Mac OS X,UNIX,Linux,Windows等,都是支持“多任务”的操作系统。而多任务,就是指操作系统可以同时运行多个任务。多任务的实现靠的是任务交替执行(时间片)多任务的实现有3种方式:多进程模式;多线程模式;多进程+多线程模式。线程是最小的执行单元,而进程由至少一个线程组成。如何调度进程和线程,完全由操作系统决定...

weixin_31913557的博客 207

Python学习笔记(六)进程和线程

对于操作系统来说,一个任务就是一个进程,有的进程还有很多子任务,这就是线程。多任务的实现主要有三种方式:多进程,多线程,多进程+多线程。线程是最小的执行单元,而进程由至少一个线程组成。如何调度进程和线程,完全由操作系统决定,程序自己不能决定什么时候执行,执行多长时间。 多进程 1.Unix/Linux操作系统提供了一个fork()系统调用,它非常特殊。普通的函数调用,调用一次,返回一次,但是f...

missyouvivian的博客 269

python学习笔记11 -- 进程和线程

进程和线程

kyrie_sakura的博客 208

python 学习笔记7进程和线程

多进程os 系统模块提供了进程的很多东西 os.getpid() 获取进程id pid = os.fork() fork创建一个新的进程 父进程返回子进程id 子进程返回0multiprocessingmultiprocessing是一个跨系统的模块,因为windows没有提供forkfrom multiprocessing import Process import os# 子进程要执行

bleuesprit的专栏 409

python学习笔记08-python-进程和线程

1.多进程 1.fork Unix/Linux操作系统提供了一个fork()系统调用,它非常特殊。普通的函数调用,调用一次,返回一次,但是fork()调用一次,返回两次,因为操作系统自动把当前进程(称为父进程)复制了一份(称为子进程),然后,分别在父进程和子进程内返回。 子进程永远返回0,而父进程返回子进程的ID。这样做的理由是,一个父进程可以fork出很多子进程,所以,父进程要记下每个子进...

满地星辰的博客 275

进程process和线程thread应用和区别——Python学习笔记12

Subprocess subprocess主要是在Python中执行外部的程序和命令。在Python中,我们通过标准库中的subprocess包来fork一个子进程,并运行一个外部的程序。 subprocess包中定义有数个创建子进程的函数,这些函数分别以不同的方式创建子进程,所以我们可以根据需要来从中选取一个使用。另外subprocess还提供了一些管理标准流(standard strea...

剑冢铭文 2263

(XWZ)的python学习笔记Ⅵ——进程和线程

目录 文章目录进程和线程多进程ProcessPool多线程 进程和线程 多进程 Process 在python中,我们可以通过实例化multiprocessing模块中的Process类来创建一个子进程,需要给该该进程传入需要执行的函数和对应的参数。进程创建好后使用方法start()来启动,在父进程中使用方法jion()时,父进程会等待子进程执行完后再接着往下执行,同于实现进程的同步操作。来看个栗子就知道怎么操作了: from multiprocessing import Process import os

a2011607的博客 282

【Python100天学习笔记】Day13 进程和线程

进程和线程 今天我们使用的计算机早已进入多CPU或多核时代,而我们使用的操作系统都是支持“多任务”的操作系统,这使得我们可以同时运行多个程序,也可以将一个程序分解为若干个相对独立的子任务,让多个子任务并发的执行,从而缩短程序的执行时间,同时也让用户获得更好的体验。因此在当下不管是用什么编程语言进行开发,实现让程序同时执行多个任务也就是常说的“并发编程”,应该是程序员必备技能之一。为此,我们需要先讨论两个概念,一个叫进程,一个叫线程。 概念 进程就是操作系统中执行的一个程序,操作系统以进程为单位分配存储空间,

码农-Vax天道的时间宝藏 1080

python学习笔记(十) - 进程和线程

线程是最小的执行单元,而进程由至少一个线程组成。如何调度进程和线程,完全由操作系统决定,程序自己不能决定什么时候执行,执行多长时间。 一.多进程 1. multiprocessing模块时跨平台版本的多线程模块 process类代表一个进程对象,创建子进程时,只需要传入一个执行函数和函数的参数,使用start方法启动 join方法可以等待子进程结束后再继续往下运行,通常用于进程间同步。

技术人生 2023
上一篇: Python IO笔记
下一篇: Java面向对象复习笔记
_best
博客等级 码龄9年 15粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值