下面对Python进程进行深刻而仔细的学习,首先先让你们了解下什么是Python进程,以及在对Python进程进行处理时注意的相关问题,接下来,就由我给你们进行介绍学习,仅供你们学习。python
不过,虽然进程可在单独的内存空间中执行,但除非这些Python进程在单独的处理器上执行,不然,实际并非“同时”运行的。是由操做系统把处理器的时间片分配给一个进程,用完时间片后就需退出处理器等待另外一个时间片的到来。程序员
另外一种方式是在在程序中指定多个“执行线程”,让它们在相同的内存空间中工做。这称为“多线程处理”。线程比进程更有效,由于操做系统没必要为每一个线程建立单独的内存空间。新建进程用os.fork函数。但它只在POSIX系统上可用,在windows版的python中,os模块没有定义os.fork函数。相反,windows程序员用多线程编程技术来完成并发任务。shell
os.fork函数建立进程的过程是这样的。程序每次执行时,操做系统都会建立一个新进程来运行程序指令。进程还可调用os.fork,要求操做系统新建一个进程。父进程是调用os.fork函数的进程。父进程所建立的进程叫子进程。编程
每一个进程都有一个不重复的进程ID号。或称pid,它对进程进行标识。子进程与父进程彻底相同,子进程从父进程继承了多个值的拷贝。如全局变量和环境变量。两个进程的惟一区别是fork的返回值。子进程接收返回值0,而父进程接收子进程的pid做为返回值。windows
用os.fork建立的子进程和父进程做为异步的并发进程而单独执行。异步是指它们各行其是,相互间不进行同步;并发是指它们可同时执行。因此咱们没法知道子进程和父进程的相对速度。多线程
os.wait函数用于等待子进程结束(只适用于UNIX兼容系统)。该函数返回包含两个元素的元组,包括已完成的子进程号pid。以及子进程的退出状态,返回状态为0,代表子进程成功完成。返回状态为正整数代表子进程终止时出错。并发
如没有子进程,会引起OSError错误。os.wait要求父进程等待它的任何一个子进程结束执行,而后唤醒父进程。要指示父进程等候一个指定的子进程终止,可在父进程中使用os.waitpid函数(只适用于unix兼容系统)。异步
它可等候一个指定进程结束,而后返回一个双元素元组,其中包括子进程的pid和子进程的退出状态。函数调用将pid做为第一个参数传递。并将一个选项做为第二个选项,若是第一个参数大于0,则waitpid会等待该pid结束,若是第一个参数是-1,则会等候全部子进程,也就和os.wait同样。ide
用os.system 和 os.exec函数族来执行系统命令和其它程序。os.system使用shell来执行系统命令,而后在命令结束以后把控制权返回给原始进程;os.exec函数族在执行完命令后不将控制权返回给调用进程。它会接管Python进程,pid不变。这两个函数支持unix和windows平台。函数
os.popen()函数可执行命令,并得到命令的stdout流。函数要取得两个参数,一个是要执行的命令,另外一个是调用函数所用的模式。如“r"只读模式。os.popen2()函数执行命令,并得到命令的stdout流和stdin流。函数返回一个元组,其中包含有两个文件对象,一个对象对应stdin流,一个对象对应stdout流。
进程使用IPC机制在进程间传递信息,一种IPC机制是“管道”,它是一种相似于文件的对象,提供单向通讯渠道。父进程可打开一个管道,再分支一个子进程。父进程使用管道将信息写入(发送到)子进程,而子进程使用管道从父进程读取信息。在python中使用os.pipe函数建立管道。
os._exit()相似于sys.exit(),但它不执行任何的清除工做(例如刷新缓冲区)。因此os._exit()尤为适用于退出子进程。若是程序使用sys.exit(),操做系统会回收父进程或其它子进程可能仍然须要的资源。传给os._exit()函数的参数必须是进程的退出状态。退出状态为0,表示正常终止。
进程也可用信号进行通讯。所谓“信号”,是操做系统采起异步方式传给程序的消息。如CTRL+C会传递一个“中断信号”,一般该信号致使程序停止。然而程序彻底能够指定用不一样的行动来响应任何一个信号。在信号处理中,程序要接收信号,并根据那个信号采起一项行动。
错误(例如向已关闭管道写入)、事件(例如计时器变成0)以及用户输入(例如按ctrl+c)都会产生信号。针对每一个信号,每一个python程序都有一个默认的信号处理程序,并非全部操做系统。
都能从一个正在运行的程序建立单独的进程,因此,进程管理是移植性最差的一项Python进程特性。每一个系统都定义了特有信号集。signal是依赖于具体平台的模块,其中只包含系统定义的信号。