Parallel Processing in Python - Python 中的并行处理
创始人
2024-05-07 01:04:02
0

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

参考链接: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 timeclass Process(multiprocessing.Process):def __init__(self, id):super(Process, self).__init__()self.id = iddef 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:

 

相关内容

热门资讯

前端-session、jwt 目录:   (1)session (2&#x...
linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
关于测试,我发现了哪些新大陆 关于测试 平常也只是听说过一些关于测试的术语,但并没有使用过测试工具。偶然看到编程老师...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
nodejs:本地安装nvm实... 一、背景-使用不同版本node的原因 vue3+ts、nuxt3版本,node...
JAVA集合知识整理 Java集合知识整理 HashMap相关 HashMap的底层数据结构:jdk1.8之...
无刷直流电机介绍及单片机控制实... 无刷直流电机介绍及单片机控制实例前言基本概念优势与劣势使用寿命基本结构使用单片机控制实例电子调速器&...
fwdiary(2) dp2 1.传纸条  AcWing 275. 传纸条 - AcWing 走两条路,走一条最大的...
常用的DOS命令 常用的DOS命令 DOS(Disk Operating System,磁...
<C++> 类和对象(下) 1.const成员函数将const修饰的“成员函数”称之为const成员函数,cons...