ad

《零基础Python 从入门到精通》_让你学得轻松_12.3 Python进程模块

admin 132 2023-10-25

【摘要】 本书摘自《零基础Python 从入门到精通》一书中第12章,第2节,编者是壹零快学。

12.3 Python进程模块

前面章节介绍了Python的多线程使用方式,本章开头介绍的CPython的多线程没有能力利用多 核计算, 多线程更多是在IO密集型场景中使用(例如读写文件访问网络API等)的;而多进程可以 更充分地利用所有的CPU资源,所以多进程适合计算密集型的场景(例如对视频进行高清转码,科

学计算等)。本节主要介绍如何创建和管理进程。

12.3.1 os模块

前面章节已经介绍了不少标准库os模块和系统相关的功能,进程本质上是由操作系统来管理的,os模块自然也少不了一些和进程相关的操作。

《零基础Python 从入门到精通》_让你学得轻松_12.3 Python进程模块

调用system函数是最简单的创建进程的方式,函数只有一个参数,就是要执行的命令。 动手写12.3.1

第 12 章 多线程与并行

这个例子会根据不同的操作系统调用不同的命令,结果都是输出当前目录的文件和文件夹。

os.system函数会返回调用的命令的返回值,0代表运行成功。

比os.system函数更复杂一点的是exec系列函数,os.exec系列函数一共有八个,它们的定义分 别是:

◇ os.execl(path, arg0, arg1, ...)

◇ os.execle(path, arg0, arg1, ..., env)

◇ os.execlp(file, arg0, arg1, ...)

◇ os.execlpe(file, arg0, arg1, ..., env)

◇ os.execv(path, args)

◇ os.execve(path, args, env)

◇ os.execvp(file, args)

◇ os.execvpe(file, args, env)

exec系列函数的执行效果基本相同,只是参数定义有些区别而已。由于exec函数不是特别常用,这里不再展开介绍,有兴趣的读者可以查找相关资料自行学习。

os.fork函数调用系统API并创建子进程,但是fork函数在Windows上并不存在,在Linux和Mac可 以成功使用。

动手写12.3.2

基 础 Python 从 入 门 到 精 通

注意:这个例子不能在Windows平台中运行,可以通过os.fork函数的返回值判断当前程序是在 主进程还是子进程。当os.fork返回值是0时,代表当前的程序在子进程,而在主进程中os.fork返回的则是子进程的进程ID。

12.3.2 subprocess模块

标准库os中的system函数和exec系列函数虽然都可以调用外部命令(调用外部命令也是创建进 程的一种方式),但是使用方式比较简单,而标准库的subprocess模块则提供了更多和调用外部命 令相关的方法。

大部分subprocess模块调用外部命令的函数都使用类似的参数,其中args是必传的参数,其他 都是可选参数:

◇ args:可以是字符串或者序列类型(如:list,tuple)。默认要执行的程序应该是序列的第 一个字段,如果是单个字符串,它的解析依赖于平台。在Unix系统中,如果args是一个字符 串,那么这个字符串会解释成被执行程序的名字或路径,然而这种情况只能用在不需要参 数的程序上。

◇ bufsieze:指定缓冲。0表示无缓冲,1表示缓冲,其他的任何整数值表示缓冲大小,负数值 表示使用系统默认缓冲,通常表示完全缓冲。默认值为0即没有缓冲。

◇ stdin,stdout,stderr:分别表示程序的标准输入、输出、错误句柄。

◇ preexec_fn:只在Unix平台有效,用于指定一个可执行对象,它将在子进程运行之前被 调用。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 18664393530@aliyun.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:阅读《时空大数据与云平台 理论篇》_走进云的世界_4.1.1 时空大数据类型
下一篇:打开《Java+EE应用开发实践教程》_读懂新的设计思路_2.1 实验五 JDBC 与 Web 数据库编程
相关文章

 发表评论

暂时没有评论,来抢沙发吧~

×