python os模块进程管理

  1. 有两种方式来实现并发性,一种方式是让每个“任务"或“进程”在单独的内在空间中工作,每个都有自已的工作内存区域。不过,虽然进程可在单独的内存空间中执行,但除非这些进程在单独的处理器上执行,否则,实际并不是“同时”运行的。是由操作系统把处理器的时间片分配给一个进程,用完时间片后就需退出处理器等待另一个时间片的到来。另一种方式是在在程序中指定多个“执行线程”,让它们在相同的内存空间中工作。这称为“多线程处理”。线程比进程更有效,因为操作系统不必为每个线程创建单独的内存空间。
  2. 新建进程用os.fork函数。但它只在POSIX系统上可用,在windows版的python中,os模块没有定义os.fork函数。相反,windows程序员用多线程编程技术来完成并发任务。
  3. os.fork函数创建进程的过程是这样的。程序每次执行时,操作系统都会创建一个新进程来运行程序指令。进程还可调用os.fork,要求操作系统新建一个进程。父进程是调用os.fork函数的进程。父进程所创建的进程叫子进程。每个进程都有一个不重复的进程ID号。或称pid,它对进程进行标识。子进程与父进程完全相同,子进程从父进程继承了多个值的拷贝,如全局变量和环境变量。两个进程的唯一区别是fork的返回值。子进程接收返回值0,而父进程接收子进程的pid作为返回值。
  4. 用os.fork创建的子进程和父进程作为异步的并发进程而单独执行。异步是指它们各行其是,相互间不进行同步;并发是指它们可同时执行。所以我们无法知道子进程和父进程的相对速度。
  5. os.wait函数用于等待子进程结束(只适用于UNIX兼容系统)。该函数返回包含两个元素的元组,包括已完成的子进程号pid,以及子进程的退出状态,返回状态为0,表明子进程成功完成。返回状态为正整数表明子进程终止时出错。如没有子进程,会引发OSError错误。os.wait要求父进程等待它的任何一个子进程结束执行,然后唤醒父进程。
  6. 要指示父进程等候一个指定的子进程终止,可在父进程中使用os.waitpid函数(只适用于unix兼容系统)。它可等候一个指定进程结束,然后返回一个双元素元组,其中包括子进程的pid和子进程的退出状态。函数调用将pid作为第一个参数传递,并将一个选项作为第二个选项,如果第一个参数大于0,则waitpid会等待该pid结束,如果第一个参数是-1,则会等候所有子进程,也就和os.wait一样。
  7. 用os.system 和 os.exec函数族来执行系统命令和其它程序。os.system使用shell来执行系统命令,然后在命令结束之后把控制权返回给原始进程;os.exec函数族在执行完命令后不将控制权返回给调用进程。它会接管python进程,pid不变。这两个函数支持unix和windows平台。
  8. os.popen()函数可执行命令,并获得命令的stdout流。函数要取得两个参数,一个是要执行的命令,另一个是调用函数所用的模式,如“r"只读模式。os.popen2()函数执行命令,并获得命令的stdout流和stdin流。函数返回一个元组,其中包含有两个文件对象,一个对象对应stdin流,一个对象对应stdout流。
  9. 进程使用IPC机制在进程间传递信息,一种IPC机制是“管道”,它是一种类似于文件的对象,提供单向通信渠道。父进程可打开一个管道,再分支一个子进程。父进程使用管道将信息写入(发送到)子进程,而子进程使用管道从父进程读取信息。在python中使用os.pipe函数创建管道。
  10. os._exit()类似于sys.exit(),但它不执行任何的清除工作(例如刷新缓冲区)。所以os._exit()尤其适用于退出子进程。如果程序使用sys.exit(),操作系统会回收父进程或其它子进程可能仍然需要的资源。传给os._exit()函数的参数必须是进程的退出状态。退出状态为0,表示正常终止。
  11. 进程也可用信号进行通信。所谓“信号”,是操作系统采取异步方式传给程序的消息。如CTRL+C会传递一个“中断信号”,通常该信号导致程序中止。然而程序完全可以指定用不同的行动来响应任何一个信号。在信号处理中,程序要接收信号,并根据那个信号采取一项行动。错误(例如向已关闭管道写入)、事件(例如计时器变成0)以及用户输入(例如按ctrl+c)都会产生信号。
  12. 针对每个信号,每个python程序都有一个默认的信号处理程序。例如,假定python解释器收到一个信号,该信号指出程序试图向已关闭的管道写入,或者用户敲入一个键盘中断,python就会引发一个异常。发生异常后,程序既可使用默认处理程序,也可使用自定义处理程序。
  13. signal.signal函数为中断信号注册一个信号处理程序。函数要获得两个参数:一个信号和一个对应于信号处理程序的函数。
  14. 在unix/linux系统中,子进程终止后,会保留在进程表中,让父进程知道子进程是否正常终止。如果创建大量子进程,但在终止后没有从进程表中移除它们,进程表便会积累越来越多的死进程,这些进程称为“zombies”(僵尸进程),消除僵尸进程的操作称为“reaping”,这是通过os.wait和os.waitpid函数实现的。

18.2. 良好的编程习惯

  1. 进程应关闭不需要的管道端,因为操作系统限制了可同时打开的文件说明符数量。

18.3. 移植性提示

  1. 并不是所有操作系统都能从一个正在运行的程序创建单独的进程,所以,进程管理是移植性最差的一项python特性。
  2. 每个系统都定义了特有信号集。signal是依赖于具体平台的模块,其中只包含系统定义的信号。
时间: 2024-10-11 05:08:28

python os模块进程管理的相关文章

python os模块学习

一.os模块概述 Python os模块包含普遍的操作系统功能.如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的.(一语中的) 二.常用方法 1.os.name 输出字符串指示正在使用的平台.如果是window 则用'nt'表示,对于Linux/Unix用户,它是'posix'. 2.os.getcwd() 函数得到当前工作目录,即当前Python脚本工作的目录路径. 3.os.listdir() 返回指定目录下的所有文件和目录名. >>> os.listdir(os.getc

Python os模块 常用功能小结

Python os模块 常用功能小结 os 模块提供了一个统一的操作系统接口函数, 这些接口函数通常是平台指定的,os 模块能在不同操作系统平台如 nt 或 posix中的特定函数间自动切换,从而能实现跨平台操作 1, os.name: 字符串指示你正在使用的平台.比如对于Windows,它是'nt',而对于Linux/Unix用户,它是'posix'. 2, os.stat(file):文件属性操作: 3, os.getcwd():得到当前工作目录,即当前Python脚本工作的目录路径: 4,

python os模块总结

python os模块主要是操作文件和目录的,常用的方法如下: #1.os.getcwd()获取当前文件所在目录 #2.os.makedirs('dirname1/dirname2') 创建目录,可生成多层递归目录 #3.os.removedirs('dirname1/dirname2') 删除目录,必须是空目录 #4.os.mkdir() 创建单目录 #5.os.rmdir() 删除空目录,若不存在报错 #6.os.listdir('dirname') 列出指定目录下的所有文件和子目录,包括隐

Python os模块--路径、文件、系统命令等操作

os模块包含普遍的操作系统功能. 注意:函数参数path是文件或目录的路径,filename是文件的路径,dirname是目录的路径,路径可以是相对路径,也可绝对路径 常见或重要的函数为加粗字体 os模块: os.name   返回当前操作系统名称('posix', 'nt', 'os2', 'mac', 'ce', 'riscos'),windows为'nt',linux为'posix' os.sep == os.path.sep 返回路径各部分之间的分隔符,linux是'/',windows

python os模块常用方法

OS模块是Python标准库中的一个操作模块,主要用于处理Linux操作系统中的文件和目录 1.要使用OS必须先导入OS import os 2.os.getcwd()获取当前路径. print os.getcwd() 3.os.listdir() 列出当前目录下的所有文件和文件夹. print os.listdir() 4.os.mkdir()创建一个名为path的文件夹 os.mkdir( path, 0755 ); 5.os.remove() 方法可以删除指定的文件. os.remove(

python os模块 常用命令

python编程时,经常和文件.目录打交道,这是就离不了os模块.os模块包含普遍的操作系统功能,与具体的平台无关.以下列举常用的命令 1. os.name()--判断现在正在实用的平台,Windows 返回 'nt'; Linux 返回'posix' 2. os.getcwd()--得到当前工作的目录. 3. os.listdir()--指定所有目录下所有的文件和目录名.例: 以列表的形式全部列举出来,其中没有区分目录和文件. 4. os.remove()--删除指定文件 5. os.rmdi

Python OS模块常用函数说明

Python的标准库中的os模块包含普遍的操作系统功能.如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的.即它允许一个程序在编写后不需要任何改动,也不会发生任何问题,就可以在Linux和Windows下运行. 下面列出了一些在os模块中比较有用的部分.它们中的大多数都简单明了. os.sep可以取代操作系统特定的路径分隔符.windows下为 "\\" os.name字符串指示你正在使用的平台.比如对于Windows,它是'nt',而对于Linux/Unix用户,它是'pos

python os模块文件相关

使用前 import os导入模块 os模块: os.sep     可以取代操作系统特定的路径分割符 os.linesep  字符串给出当前平台使用的行终止符.例如,Windows使用'\r\n',Linux使用'\n' 而Mac使用'\r'. os.name         字符串指示你正在使用的平台.比如对于Windows,它是'nt',而对于Linux/Unix用户,它是'posix' os.getcwd()   函数得到当前工作目录, os.getenv()和os.putenv()  

python os模块功能和方法总结

1 os.sep 可以取代操作系统特定的路径分割符 2 os.linesep 字符串给出当前平台使用的行终止符.例如,Windows使用'\r\n',Linux使用'\n' 而Mac使用'\r'. 3 os.name 字符串指示你正在使用的平台.比如对于Windows,它是'nt',而对于Linux/Unix用户,它是'posix' 4 os.getcwd() 函数得到当前工作目录, 5 os.getenv()和os.putenv() 函数分别用来读取和设置环境变量. 6 os.listdir(