Parallel Processing in Python - Python 中的并行处理

news2024/11/15 1:45:47

        并行处理可以增加程序完成的任务数量,从而减少整体处理时间。这些有助于处理大规模问题。

参考链接:Parallel Processing in Python - GeeksforGeeks

1 并行处理介绍

        对于并行性,重要的是将问题划分为不依赖于其他子单元 (或较少依赖) 的子单元。子单元完全独立于其他子单元的问题称为embarrassingly parallel。

        例如,数组上的元素操作。在这种情况下,操作需要了解其当前正在处理的特定元素

        在另一种情况下,被划分为子单元的问题必须共享一些数据以执行操作。由于通信成本的原因,这些导致了性能问题。        

        处理并行程序有两种主要方法:

        共享内存

        在共享存储器中,子单元可以通过相同的存储器空间相互通信。优点是不需要显式处理通信,因为这种方法足以从共享内存读取或写入。但是当多个进程访问并同时更改相同的内存位置时,问题就出现了。使用同步(synchronization)技术可以避免这种冲突

        分布式内存

        在分布式内存中,每个进程是完全分开的,并具有自己的内存空间。在这种情况下,进程之间的通信是显式处理的。由于通信是通过网络接口进行的,因此与共享内存相比成本更高。

        线程是实现与共享内存并行性的方法之一。线程是源自进程并共享内存的独立子任务。

        由于全局解释器锁定 (GIL),线程不能用于提高Python中的性能。

        GIL是一种机制,其中Python解释器设计一次只允许一条Python指令运行。、

        GIL限制可以通过使用进程而不是线程来完全避免。使用进程几乎没有缺点,例如比共享内存效率更低的进程间通信,但是它更加灵活和明确。        

2 并行处理的多处理

        使用标准的多处理模块,我们可以通过创建子进程来有效地并行处理简单的任务。该模块提供了一个易于使用的界面,并包含一组实用程序来处理任务提交和同步。

        通过子类化multiprocessing.Processing,您可以创建一个独立运行的进程。通过扩展 __init__ 方法,可以初始化资源,通过实现Process.ru n() 方法,可以为子进程编写代码。在下面的代码中,我们看到了如何创建一个打印分配的id的进程:

        

import multiprocessing
import time


class Process(multiprocessing.Process):
    def __init__(self, id):
        super(Process, self).__init__()
        self.id = id

    def run(self):
        time.sleep(1)
        print("I'm the process with id: {}".format(self.id))

        要生成进程,需要初始化我们的进程对象并调用process.start() 方法。这里Process.start() 将创建一个新的进程,并将调用Process.run() 方法。

if __name__ == '__main__':
    p = Process(0)
    p.start()

        p.start() 之后的代码将在process p的任务完成之前立即执行。要等待任务完成,可以使用Process.join()

if __name__ == '__main__':
    p = Process(0)
    p.start()
    p.join()
    p = Process(1)
    p.start()
    p.join()

OUTPUT:

 

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

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

相关文章

【Vue中使用Echarts】大屏可视化项目整体布局(pink老师vue 版)

文章目录一、效果展示二、基本的布局三、背景四、代码布局中遇到的一些问题一、效果展示 先看一下展示的效果,无论是尺寸多宽的屏幕,都会将内容显示完整,做到了正正的响应式。唯一不足的是图表中的样例,会随着图表的缩放而变换位…

35-剑指 Offer 37. 序列化二叉树

题目 请实现两个函数,分别用来序列化和反序列化二叉树。 你需要设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。 …

第02讲:HTTP操作之ElasticSearch索引操作

3.1.1、索引操作 实验1:创建索引 对比关系型数据库,创建索引就等同于创建数据库 在 Postman 中,向 ES 服务器发 PUT 请求 :http://127.0.0.1:9200/shopping { "acknowledged"【响应结果】: true, # true操作成功 "shards…

npm与包

1、包 1.1、什么是包 Node.js 中的第三方模块又叫做包。就像电脑和计算机指的是相同的东西,第三方模块和包指的是同一个概念,只不过叫法不同。 1.2、包的来源 不同于 Node.js 中的内置模块与自定义模块,包是由第三方个人或团队开发出来的&a…

跟踪数据集汇总

文章目录DanceTrack 运动跟踪数据集简介转为Labelme标注的物体检测数据集格式WiderPerson行人检测数据集简介转为Labelme标注的物体检测数据集格式DanceTrack 运动跟踪数据集 简介 DanceTrack 是一个大规模的多对象跟踪数据集。用于在遮挡、频繁交叉、同样服装和多样化身体姿…

DVWA之SQL注入漏洞与防御

数据来源 本文仅用于信息安全学习,请遵守相关法律法规,严禁用于非法途径。若观众因此作出任何危害网络安全的行为,后果自负,与本人无关。 耳熟能详的SQ注入是什么? 关于SQL注入漏洞,维基百科是这样解释的 …

传统离散制造行业的9个维度,你知道吗?

制造业是国家的经济基础,是立国之本、兴国之器、强国之基;作为我国实体经济的主体,是国民经济体系的重要组成部分。按照产品制造工艺过程特点,制造业总体上可以分为离散型制造、流程型制造、混合型制造。离散制造包括家电、家居、…

2022亚太杯数学建模E题(1月补赛)

占个位置吧,更新E题的详细思路代码,文章末尾名片获取!ABC题已更新 持续为更新参考思路 E题思路分析: 第一问都是一些基础的数据分析问题,使用题目给出的数据稍加整理归纳即可得出结论。 E题给了4张表格数据&#x…

MySQL调优-MySQL索引优化实战二

目录 MySQL调优-MySQL索引优化实战二 分页查询优化 >>常见的分页场景优化技巧: 1、根据自增且连续的主键排序的分页查询 2、根据非主键字段排序的分页查询 Join关联查询优化 MySQL的表关联常见有两种算法: 1.嵌套循环连接 Nested-Loop Join…

Python入门注释和变量

1.1计算机的基本原理 1.2 计算机的组成 2.1编程语言与python 2.2在 Welcome to Python.org 里面进入 无脑下一步下载 下载后打开cmd,输入名令Python显示下载的版本号 exit()退出编辑 Pycharm无脑安装 社区版无需破解,专业版需破…

MATLAB 矩阵数据可视化imagesc 以及 如何多图共用一个 colorbar

当遇到需要查看一个二维矩阵数据中值的大小分布情况时可以使用 MATLAB 把矩阵以图像的形式展现出来,这样更直观。MATLAB 的可视化函数之一是 imagesc( ),还有其他的方法,这里只介绍下 imagesc。 目录 1、单一作图 2、同时绘制多图并共用 c…

谷粒学院——第十九章、数据同步_网关

Canal 数据同步(了解) 网关 API 网关介绍 API 网关出现的原因是微服务架构的出现,不同的微服务一般会有不同的网络地址,而外部客户端可能 需要调用多个服务的接口才能完成一个业务需求,如果让客户端直接与各个微服务…

vue+element对接第三方接口实现校园发帖网站“淘柳职”

一.前言 接上一篇博客《vueelementuijava 前后端分离实现学校帖子网站,仿照“淘柳职”学校大作业》 上一篇博客介绍的项目完全自带前、后端实现的,是一个完整的项目,现在作者在此基础上,利用已实现的前端,对接《淘柳职…

android12.0(S) DeviceOwner 应用默认授权(MDM 权限)

MDM(Mobile Device Manager) 通俗来讲就是管理设备使用 国内 MDM 服务商有 360 等 国外 MDM 服务商有 hexnode 等 当你在设备上配置了 DeviceOwner 后,状态栏下拉中会多出如下 关于 DeviceOwner 介绍可参考下面 Android DeviceOwner 应用的能力 Android Device…

品牌舆情监测系统简介,品牌舆情监测及应对方案?

品牌舆情监测是指通过观察和分析互联网和社交媒体上关于企业、产品或服务的信息,以了解消费者对企业、产品或服务的看法和感受。品牌舆情监测可以帮助企业了解消费者对企业、产品或服务的反馈,从而改进产品和服务,提高客户满意度。品牌舆情监…

【4.3】Ribbon饥饿加载

【4.3】Ribbon饥饿加载1 测试2 饥饿加载2.1 修改加载策略3 Ribbon负载均衡总结1 测试 重启Order服务,回到浏览器,打开浏览器的控制台,发起一次请求: 可以看到这次请求的耗时达到了390ms 再刷新一次: 可以看到这次时…

谷粒学院——第二十章、权限管理

一、权限管理需求描述 不同角色的用户登录后台管理系统拥有不同的菜单权限与功能权限,权限管理包含三个功能模块:菜单管理、角色管理和用户管理 1、菜单管理 (1)菜单列表:使用树形结构显示菜单列表 (2&…

故障分析 | MySQL 主从延时值反复跳动

作者:徐文梁 爱可生DBA成员,负责客户项目的需求和维护。目前在数据库新手村打怪升级中。喜欢垂钓,如果你也喜欢垂钓,可以约个晴好天气,咱们一边钓鱼一边聊聊数据库,岂不快哉。 本文来源:原创投稿…

idea常用配置及问题解决

文章目录一、配置1.字体与行高2.快捷键(eclipse)3.Git配置4.添加Github账户5.设置字符集:UTF-86.设置自动编译7.顶部工具栏左侧显示8.配置.gitignore文件9.忽略、不显示文件10.显示包的层级结构(树结构)11.修改 Generate 快捷键12.设置代码提示忽略大小写13.去除pom.xml中依赖的…

【Go】入门Go语言

【Go】入门Go语言 前言 Go这门语言在当下已经越来越火热了,无论是后端开发岗,还是逆向安全岗位,亦或是渗透领域,乃至脚本小子…各个领域的人员都在分Go这一杯羹。 并且在最近越来越多的CTF比赛中,Go逆向、Go pwn&am…