Python数据分析与可视化:实战案例解析
132
2023-10-25
【摘要】 本书摘自《零基础Python 从入门到精通》一书中第12章,第2节,编者是壹零快学。
12.3 Python进程模块
前面章节介绍了Python的多线程使用方式,本章开头介绍的CPython的多线程没有能力利用多 核计算, 多线程更多是在IO密集型场景中使用(例如读写文件访问网络API等)的;而多进程可以 更充分地利用所有的CPU资源,所以多进程适合计算密集型的场景(例如对视频进行高清转码,科
学计算等)。本节主要介绍如何创建和管理进程。
12.3.1 os模块
前面章节已经介绍了不少标准库os模块和系统相关的功能,进程本质上是由操作系统来管理的,os模块自然也少不了一些和进程相关的操作。
调用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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~