python一点通: 并行技术有几种? thread和process有什么区别

Python中QThread、Thread、Processing的比较总结 最近在学习PyQt相关知识,碰到了其中的QThread类。于是查找学习了Python中Thread类与Processing类的基础知识 1. Thread类 // TODO 2. Process类 // TODO 3. QThread类 在程序设计中,有时候有一些模块需要较长时间执行,例如文件传输等。在一个GUI程序中,如果直接使用简单的信号-槽(即简单事件响应机制)机制完成这类模块,那么在执行该模块时整个程序会陷入无响应,直到执行完成后才会恢复正常。 解决这种问题的好办法是引入多线程机制 基本用法 Q 阅读详情
AI摘要

本文介绍了Python中实现并行计算的三种方法:线程、进程和concurrent.futures模块。线程适合IO密集型任务,进程适合CPU密集型任务,而concurrent.futures提供了高级接口以简化并行执行。选择哪种方式取决于任务的性质和性能需求。

在Python中,并行性是一种技术,允许程序同时执行多个任务,从而提高整体性能。Python提供了几种实现并行性的方法,包括线程(threading)、多进程(multiprocessing)以及concurrent.futures模块。在本博文中,我们将探讨线程和进程的概念,它们的区别以及何时选择它们。我们还将介绍concurrent.futures模块作为Python中并行计算的高级接口。我们将提供示例来说明如何使用线程、进程和concurrent.futures进行并行计算。

线程

线程(Thread)是程序中表示单个控制流的最小执行单位。它们是操作系统可以管理和调度的最小执行单元。进程内的线程共享一些资源,如内存和文件句柄,这使得在多个线程之间共享数据更加容易和高效。然而,这也意味着必须小心确保安全地访问共享数据,并进行适当的同步,以避免竞态条件或死锁等问题。

在Python中,可以使用threading模块创建和管理线程。以下是一个示例:

import threading

def print_numbers():
    for i in range(5):
        print(f'Number {i}')

def print_letters():
    for letter in 'abcde':
        print(f'Letter {letter}')

thread1 = threading.Thread(target=print_numbers)
thread2 = threading.Thread(target=print_letters)

thread1.start()
thread2.start()

thread1.join()
thread2.join()

需要注意的是,Python的CPython实现有一个全局解释器锁(Global Interpreter Lock,GIL),它限制了线程的并行执行。这使得在Python中,线程更适合于IO密集型任务,即线程在很大程度上会等待IO操作完成。

进程

进程(Process)与线程不同,它们拥有完全独立的内存空间,并在各自独立的环境中运行。这意味着进程间通信需要更复杂的机制,并且与线程通信相比可能更慢。然而,进程提供更好的隔离性,一个进程中的错误或崩溃不会影响其他进程。

Python的multiprocessing模块用于创建和管理进程。以下是一个示例:

from multiprocessing import Process

def print_numbers():
    for i in range(5):
        print(f'Number {i}')

def print_letters():
    for letter in 'abcde':
        print(f'Letter {letter}')

process1 = Process(target=print_numbers)
process2 = Process(target=print_letters)

process1.start()
process2.start()

process1.join()
process2.join()

由于进程可以实现真正的并行性,因此多进程更适用于Python中的CPU密集型任务,即同时运行任务可以显著提高性能。

concurrent.futures

concurrent.futures模块提供了一个高级接口,用于在Python中异步执行可调用对象。它具有ThreadPoolExecutor和ProcessPoolExecutor类,分别用于使用多个线程或进程并行化代码执行。该模块简化了线程和进程的管理过程,并提供了其他功能,例如处理异常和与可用结果进行交互。

使用concurrent.futures.ThreadPoolExecutor的示例用法:

from concurrent.futures import ThreadPoolExecutor

def square(x):
    return x * x

with ThreadPoolExecutor(max_workers=4) as executor:
    result = list(executor.map(square, range(0, 10)))

print(result)

使用concurrent.futures.ProcessPoolExecutor的示例用法:

from concurrent.futures import ProcessPoolExecutor

def square(x):
    return x * x

with ProcessPoolExecutor(max_workers=4) as executor:
    result = list(executor.map(square, range(0, 10)))

print(result)

线程 vs. 进程:区别概况

  • 内存和资源共享
  • 创建和管理
  • 并发性和并行性
  • 错误处理和容错性
    有关这些区别的详细说明,请参阅本博文前面提供的详细解释。

何时使用线程、进程或concurrent.futures

选择线程还是进程取决于正在执行的任务的特定要求和性质:

对于IO密集型任务,其中有多个任务经常需要等待IO操作完成,可以使用线程。线程轻量级,共享内存和资源,并且对于并发的IO密集型任务提供更好的性能。可以使用concurrent.futures.ThreadPoolExecutor来简化线程管理。
对于CPU密集型任务,需要真正的并行性以实现最大的计算效率,可以使用进程。进程重量级,具有隔离性,并且提供更好的容错性。可以使用concurrent.futures.ProcessPoolExecutor来简化进程管理。

结论

在本博文中,我们探讨了Python中的线程和进程的概念,讨论了它们的区别,并介绍了concurrent.futures模块作为并行计算的高级接口。了解何时使用线程、进程或concurrent.futures对于编写高效的Python程序至关重要,并可以显著提高应用程序的性能。

在选择线程和进程之间或在concurrent.futures的ThreadPoolExecutor和ProcessPoolExecutor之间进行选择时,请记住考虑任务类型(CPU密集型还是IO密集型)、可用CPU核心数量、并发性、并行性和同步要求。在考虑这些因素的基础上,可以选择最适合Python程序的并行性方法并优化性能。

阅读

英文版

阅读

公众号

AI书籍清单

AI日新月异,但是万丈高楼拔地起,离不开良好的基础。您是否有兴趣了解人工智能的原理和实践? 不要再观望! 我们关于 AI 原则和实践的书是任何想要深入了解 AI 世界的人的完美资源。 由该领域的领先专家撰写,这本综合指南涵盖了从机器学习的基础知识到构建智能系统的高级技术的所有内容。 无论您是初学者还是经验丰富的 AI 从业者,本书都能满足您的需求。 那为什么还要等呢?

人工智能原理与实践 全面涵盖人工智能和数据科学各个重要体系经典

北大出版社,人工智能原理与实践 人工智能和数据科学从入门到精通 详解机器学习深度学习算法原理

C++与Python并发并行编程实战:从概念到工程应用 并发与并行是现代编程中提升程序性能的核心概念。并发关注程序结构,通过任务切换在单核或多核上处理多个任务,提高资源利用率和响应速度;并行则依赖多核硬件,实现任务真正的同时执行以缩短计算时间。理解这两者的差异对于设计高效系统至关重要,尤其在处理I/O密集型或CPU密集型任务时。在工程实践中,C++通过std::thread和std::async提供底层控制,适合高性能系统;Python则因GIL限制,采用asyncio处理高并发I/O,利用multiprocessing实现CPU并行。掌握这些技术能优化Web服 阅读详情

相关推荐

模拟CMOS集成电路设计入门学习(1)

模拟CMOS集成电路设计入门学习(1):二级效应

qq_61052827的博客 3084

Python多进程(process)和多线程(thread)的区别

一、线程与进程 1.基本概念 线程:是程序执行流的最小单元,是系统独立调度和分配CPU(独立运行)的基本单位。 进程:是资源分配的基本单位。一个进程包括多个线程。 一个应用程序至少包括1个进程,而1个进程包括1个或多个线程,线程的尺度更小。 每个进程在执行过程中拥有独立的内存单元,而一个线程的多个线程在执行过程中共享内存。 2.区别 (1)线程与资源分配无关,它属于某一个进程,并与进程内的其他线程一起共享进程的资源。 (2)每个进程都有自己一套独立的资源(数据),供其内的所有线程共享。

rs勿忘初心的博客 1万+

箱式连续提升机

箱式连续提升机,是对具有高度差较大(>1500mm)的输送线之间进行连接,将箱式物资进行连续输送的提升(或下降)的输送设备,可根据输送线的具体输送要求作相应的参数设计。目前的箱式连续提升机种类比较多,常用的形式主要有Z型和C型,工作原理相同,只是入口和出口分别在两侧和同侧。

月生沧溟 1248

多线程互斥锁信号量

例1:线程加锁import threading import time num=0 def run(n): lock.acquire() global num num+=1 print("task start",n) time.sleep(2) print("task done=>",n,'num=%d'%num) print(thre...

kdttbk的博客 261

手把手教你搞定JBI投稿:从Statement of Significance到Declaration Statement的保姆级避坑指南

本文提供了一份详细的JBI投稿指南,重点解析Statement of Significance和Declaration of Interests的撰写技巧,帮助研究者避开常见格式陷阱。通过实战案例和检查清单,确保投稿符合JBI的学术严谨性和临床转化价值要求,提升稿件通过率。

weixin_29278805的博客 622

LPDDR5X内存技术解析:性能提升与优化策略

内存技术在现代计算系统中扮演着核心角色,其性能直接影响整体系统效率。LPDDR5X作为JEDEC最新标准,通过提升数据传输率至8533Mbps、优化能效比15%以上,并扩展突发长度至32字节,显著提升了移动设备的处理能力。这些改进特别适用于5G通信、AI加速(如昇腾芯片)及8K视频处理等高带宽需求场景。技术原理上,LPDDR5X引入了动态电压频率调整(DVFS)和可编程突发长度等创新机制,有效降低了实际应用中的延迟。在工程实践中,合理的PCB布局和信号完整性验证是确保高速稳定运行的关键。随着AI和8K应用的

weixin_29190169的博客 397

Python 并发编程 Process 进程、Thread 线程、阻塞模型、asyncio 协程等基础教程

01、进程的基本介绍 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础,进程是线程的容器。 什么是进程? 进程的概念主要有两点: 第一,进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region)、数据区域(data region)和堆栈(stack region)。文本区域存储处理器执行的代码;数据区域存储变量和进程执行期间使用的动态分配的内存;堆栈区域存储着活动过程调用的指令(比如错误信息

唤醒手腕 2571

网格质量评价

CFD中评价网格质量的方法

B_etter_Man的博客 1万+

多线程(Threading)和多进程(Multiprocessing)

Python多线程高并发什么是多线程基本方法函数继承使用线程同步 什么是多线程 单线程: 在程序当中,只有一个箭头指向代码从头到尾执行。 import time def sorry(): print("Sorry") time.sleep(1) if __name__ == '__main__': for i in range(5): sorry() 依次打印五个sorry,每个间隔1秒 多线程: 在一个脚本当中,一次同时运行多个程序。 import time i

Hanhahahahah的博客 4005

PyTorch实战(21)——扩散模型(Diffusion Model)

扩散模型通过简单的噪声扩散过程,就能创造出高质量的超现实图像。在本节中,我们首先学习了扩散如何用于图像生成,了解了扩散模型的内部运作机制。随后基于动漫图像数据集,使用 PyTorch 和 Hugging Face 框架训练和运行自定义扩散模型,生成逼真动漫图像。

盼小辉丶的博客 3354

把审批体验做成一体化:SAP Business Workflow 里的 Secondary Method、Before Method 与 After Method

摘要:SAP Business Workflow 中,Task 的 Secondary、Before 和 After 三类方法对提升审批体验和可追溯性至关重要。Secondary Method 可自动展示辅助信息(如审批时弹出排班报表),但需注意其独立会话特性;Before Method 适合预处理和审计留痕;After Method 确保收尾动作可靠执行。三类方法按特定顺序调用,且错误不影响主流程。合理使用这些方法能减少事务码切换,增强审计能力,优化用户体验。(149字)

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

python多线程(Multiprocessing)与多线程(Multithreading)区别优缺点最详细解释

原文链接 待翻译

外婆家的大灰狼 2万+

Yocto开发讲解系列 - 总目录

Yocto开发讲解系列总纲Yocto开发专栏前言

fulinux的博客 3万+

Python--开启多进程(Process 模块)与开启多线程(Thread 模块)

开启多进程:Process 类与 Thread 类的介绍; start (), run(), terminate() , is_alive() , join( ) 方法详解 ; 开启进程或线程的两种方式; Process 与 Thread 的区别---守护进程与守护线程的区别; Python 能开启线程,又提供进程方法的原因;

weixin_43988680的博客 3964

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Python 的线程(Thread)和进程(Process)

Python 中的全局解释器锁(GIL)确保在任何时刻只有一个线程能够执行 Python 字节码,这意味着 CPU 密集型任务在多线程中不会获得性能提升。线程是操作系统调度的最小单位,线程通常在一个进程内创建和执行。多个线程可以共享进程的内存空间和资源。线程适合于 I/O 密集型任务(如文件操作、网络请求等),但由于 Python 的全局解释器锁(GIL),它对于 CPU 密集型任务并没有显著的性能提升。在 Python 中,进程适合于 CPU 密集型任务,因为每个进程可以独立运行,不受 GIL 的限制。

[ta叫我小白]的专栏 1119

VC中sqlite的使用

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

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

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

剑冢铭文 2263

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

python multiprocessing.Process与threading.Thread的区别以及多进程,多线程的一些使用方法

在前置的学习过程中遇到了tensorflow的一些问题,就想着用进程或者线程来解决。但是使用过程中出现了不少bug,才有了本文 概述 Process跟Thread的一些区别如下(不一定全面,只是自己使用中总结的): (下文中会分别用代码说明) 首先是内存共享的问题。Thread创建的子线程可以直接使用主线程的变量数据;而Process创建的子进程跟主进程是完全隔离的,如果要用到主进程的变量,就必须作为参数传入,即使将所需变量设置为global也无效(因为设置.

noblaker的博客 3013

python多进程并行的简单实现

  这两天在跑一个文件处理程序的时候想着利用多核并行处理实现节省时间,然后例程里用了threading.Thread来实现,结果依旧很慢,查看了一下cpu使用情况根本就是在单核上跑啊。查了一下才发现python中多线程存在PIL锁,什么意思呢,就是说这个锁使得同时只能有一个线程执行。。。。。这样的结果就是即使利用了多线程,多个线程仍旧是在单核上执行的,执行某一个线程的时候,余下的所有线程都吃瓜。 ...

Lucky_Go的博客 2724

python 进程 线程_python 进程Process与线程threading区别(41)

文章首发微信公众号,微信搜索:猿说python一.线程threading创建对于python线程相关的函数本文不再做详细讲解,如果想学习线程threading内容请参考:# !usr/bin/env python# -*- coding:utf-8 _*-"""@Author:何以解忧@Blog(个人博客地址): shuopython.com@WeChat Official Account(微信公...

weixin_39687192的博客 111

python 进程(Process)与线程(Thread)

一个程序默认就是一个进程,操作系统通过这个进程来提供内存等资源,一个进程相当于是一个公司,下面执行任务的员工,也就是线程,所以线程就是任务调度的基本单位,一个进程下面默认就是一个线程。 多任务的执行方式有并发执行与并行执行两种,所谓并发就是指在一段时间内交替执行任务,这对应于单核CPU多任务场景;并行指的是同时执行任务,对应于多核CPU多任务场景。 一个程序默认为一个进程,也叫作主进程,利用python的multiProcessing开启多进程后,子进程会将主进程的代码资源全部进行拷贝,然后再执行该进程

lijixing_another的博客 812

Python笔记-进程Process、线程Thread、上锁

进程Process、线程Thread、上锁

Marlboro 1730

面试常见问题:python线程(Thread)、进程(Process)的区别,以及适合的应用场景。

线程(Thread)和进程(Process)都是用于实现并发执行任务的核心概念。在遇到需要处理大量的任务的时候,常常会使用到,所以面试题中也经常会出现此类问题。

老谢不老的博客 1414

【Python学习笔记】(八)多线程与并行:_thread模块、threading模块、Queue模块;os模块、subprocess模块、multiprocessing.Process模块

进程:计算机中已运行程序的实体。 线程:操作系统能都进行运算调度的最小单位。进程包含线程,线程是进程的实际运作单位。 多线程:指在软件或者硬件上实现多个线程并发执行的技术。

一亿少女的梦 735

协程(Coroutine)、线程(Thread)、进程(Process)三者的区别和联系

本文简明扼要地解释了Python中协程、线程和进程的关键区别。主要内容包括: 概念对比:进程是独立程序,线程是进程内的并发任务,协程是线程内更轻量的任务切换方式 特性比较: 进程:真并行、高开销、内存隔离,适合CPU密集型任务 线程:伪并发、中等开销、共享内存,适合IO密集型任务 协程:伪并发、极低开销、共享内存,适合异步IO任务 核心区别:协程主动交出控制权,线程和进程由操作系统调度 使用建议:CPU密集型用多进程,IO密集型用协程或多线程,轻量级任务优选协程 文章通过通俗类比和表格对比,清晰展示了三者的

陈开心的博客 865

Python线程锁(Thread Lock)和进程锁(Process Lock)

在Python中,线程锁(Thread Lock)和进程锁(Process Lock)具有相似的功能,但它们分别用于同步多线程和多进程环境中的资源访问

数据与算法架构提升之路专栏 2473

Python:thread & process

一、进程和线程的区别 1.线程是CPU的最小执行单位,直接运行在CPU上的是线程而不是进程; 2.进程是线程资源的集合,一个进程至少包含一个线程 3.线程之间可以共享内存资源,进程之间无法直接共享内存空间。 二、线程 1.Create thread:

ywq935的博客 772
上一篇: python一点通: multiprocessing中start和join是什么意思?
下一篇: 深度学习一点通: 如何设置batch size?
robot_learner
博客等级 码龄7年 632粉丝 187原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值