Python编程代码示例

Python编程代码示例,第1张

当你在机器上启动某个程序时,它只是在自己的“bubble”里面运行,这个气泡的作用就是用来将同一时刻运行的所有程序进行分离。这个“bubble”也可以称之为进程,包含了管理该程序调用所需要的一切。

例如,这个所谓的进程环境包括该进程使用的内存页,处理该进程打开的文件,用户和组的访问权限,以及它的整个命令行调用,包括给定的参数。

此信息保存在UNIX/Linux系统的流程文件系统中,该系统是一个虚拟文件系统,可通过/proc目录进行访问。条目都已经根据进程ID排过序了,该ID是每个进程的唯一标识符。示例1显示了具有进程ID#177的任意选择的进程。

示例1:可用于进程的信息

Python编程代码示例,Python编程代码示例,第2张

 

构建程序代码以及数据

程序越复杂,就越有助于将其分成较小的模块。不仅仅源代码是这样,在机器上执行的代码也同样适用于这条规则。该规则的典型范例就是使用子进程并行执行。这背后的想法就是:

单个进程包含了可以单独运行的代码段

某些代码段可以同时运行,因此原则上允许并行

使用现代处理器和 *** 作系统的特性,例如可以使用处理器的所有核心,这样就可以减少程序的总执行时间

减少程序/代码的复杂性,并将工作外包专门的代理

使用子进程需要重新考虑程序的执行方式,从线性到并行。它类似于将公司的工作视角从普通员工转变为经理——你必须关注谁在做什么,某个步骤需要多长时间,以及中间结果之间的依赖关系。
这有利于将代码分割成更小的部分,这些更小的部分可以由专门用于此任务的代理执行。如果还没有想清楚,试想一下数据集的构造原理,它也是同样的道理,这样就可以由单个代理进行有效的处理。但是这也引出了一些问题:

为什么要将代码并行化?落实到具体案例中或者在努力的过程中,思考这个问题有意义吗?

程序是否打算只运行一次,还是会定期运行在类似的数据集上?

能把算法分成几个单独的执行步骤吗?

数据是否允许并行化?如果不允许,那么数据组织将以何种方式进行调整?

计算的中间结果是否相互依赖?

需要对硬件进行调整吗?

在硬件或算法中是否存在瓶颈,如何避免或者最小化这些因素的影响?

并行化的其他副作用有哪些?

可能的用例就是主进程,以及后台运行的等待被激活的守护进程(主/从)。此外,这可能是启动按需运行的工作进程的一个主要过程。在实践中,主要的过程是一个馈线过程,它控制两个或多个被馈送数据部分的代理,并在给定的部分进行计算。

请记住,由于 *** 作系统所需要的子进程的开销,并行 *** 作既昂贵又耗时。与以线性方式运行两个或多个任务相比,在并行的情况下,根据您的用例,可以在每个子过程中节省25%到30%的时间。例如,如果在系列中执行了两项消耗5秒的任务,那么总共需要10秒的时间,并且在并行化的情况下,在多核机器上平均需要8秒。这8秒中的3秒可能会在头顶上消失,限制你的速度提高。

运行与Python并行的函数

Python提供了四种可能的处理方式。首先可以使用mulTIprocessing模块并行执行功能。第二,进程的替代方法是线程。从技术上讲,这些都是轻量级的进程,不在本文的范围之内。想了解更加详细的内容,可以看看Python的线程模块。第三,可以使用os模块的system()方法或subprocess模块提供的方法调用外部程序,然后收集结果。

mulTIprocessing模块涵盖了一系列方法来处理并行执行例程。这包括进程,代理池,队列以及管道。
清单1使用了五个代理程序池,同时处理三个值的块。对于代理的数量和对chunksize的值都是任意选择的,用于演示目的。根据处理器中核心的数量来调整这些值。

Pool.map()方法需要三个参数 - 在数据集的每个元素上调用的函数,数据集本身和chunksize。在清单1中,我们使用square函数,并计算给定整数值的平方。此外,chunksize不是必须的。如果未明确设置,则默认chunksize为1。

请注意,代理商的执行订单不能保证,但结果集的顺序是正确的。它根据原始数据集的元素的顺序包含平方值。

清单1:并行运行函数

Python编程代码示例,Python编程代码示例,第3张

 

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/dianzi/2717240.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-17
下一篇 2022-08-17

发表评论

登录后才能评论

评论列表(0条)

保存