当运行一个程序时,操作系统会创建一个进程。它会使用系统资源(CPU、内存和磁盘空间)和操作系统内核中的数据结构(文件、网络连接、用量统计等)。进程之间是互相隔离的,即一个进程既无法访问其他进程的内容,也无法操作其他进程。
操作系统会跟踪所有正在运行的进程,给每个进程一小段运行时间,然后切换到其他进程,这样既可以做到公平又可以响应用户操作。可以在图形界面中查看进程状态,在Mac OS X上可以使用活动监视器,在Windows上可以使用任务管理器。
可以自己编写城区来获取进程信息。标准库模块os提供了一些常用的获取系统信息的函数。举例来说,下面的函数会获取正在运行的python解释器的进程号和当前工作目录。
>>> import os
>>> os.getpid()
4988
>>> os.getcwd()
'C:Userslpt20'1. 使用subprocess创建进程
到目前为止,看到的左右程序都是单进程程序。可以使用python标准库中的subprocess模块来启动和终止其他程序。如果只是想在shell中运行其他程序并获取它的输出(标准输出和标准错误输出),可以使用getoutput()函数。
>>> import subprocess
>>> ret=subprocess.getoutput('date')
>>> ret
'当前日期: 2018/06/23 周六 n输入新日期: (年月日) '在进程执行完毕之前,获取不到任何内容。如果需要调用一些比较耗时的程序,可以使用11.1节提到的并发。因为getoutput()的参数是一个字符串,可以表示一个完整的shell命令,所以可以在李敏使用参数、管道、I/O重定向<和>,等等;
2. 使用multiprocessing创建进程
import multiprocessing
from multiprocessing import Process
import os
def do_this(what):
whoami(what)
def whoami(what):
print("Process %s says: %s" % (os.getpid(),what))
if __name__=="__main__":
whoami("我是主程序")
for n in range(4):
p=Process(target=do_this,args=("我是主程序 %s" % n,))
p.start()3. 使用terminate()终止进程
import multiprocessing
from multiprocessing import Process
import time
import os
def whoami(name):
print("我是 %s,in process %s" % (name,os.getpid()))
def loopy(name):
whoami(name)
start=1
stop=1000000
for num in range(start,stop):
print("tNumber %s of %s,Honk!" % (num,stop))
time.sleep(1)
if __name__=="__main__":
whoami("main")
p=Process(target=loopy,args=("loopy",))
p.start()
time.sleep(5)
p.terminate()
















