菜鸟学习: Python中的进程 (一)

一、进程与线程的概念
1、进程
进程与线程都是计算机操作系统中的基本运行单元,一个程序,可能包括多个进程,一个进程可能包括多个线程。进程是资源管理最小单位,线程是计算机执行最小单位。进程就是正在执行的程序,比如你运行qq,在windows任务管理器中就会有qq.exe或qq相关的exe,这些就是进程。
2、线程
线程是进程的执行单元,大多数程序只有一个主线程,但是为了提高效率,可以使用多个线程。在执行CPU密集的任务时,python多线程属于鸡肋。因为全局锁的存在(GIL),同一时间只有一个线程会被执行,其他线程都会等待,这样即使有多个CPU核也会只是实现分时操作。多个线程也可能只是线性执行,因为全局锁的上下文开销,效率反而不如单线程。
但如果是I/O密集型程序,比如网络通信、读写文件,python的多线程可以明显的提高效率。
3、进程和线程的对比
进程是重量级的,创建一个进程开销比较大,线程是轻量级的,生产线程的开销比较小,但会存在死锁、数据同步、实现复杂等问题。
因为python使用了全局解释器锁(GIL)和队列模块,所以其线程的实现复杂度比其他语言要低很多。python解释器并不是线程安全的,因为当前线程必须有全局解释器锁才能安全访问python对象。

二、python对于进程与线程处理的支持
1、进程和线程相关函数与模块
os/sys : 包含基本进程管理函数
subprocess : Python基本库中多进程相关模块
signal : Python基本库中信号相关模块
threading : Python基本库中线程相关模块

2、os/sys模块中的相关函数
popen : 生成新的进程
abort/exit : 终止进程
system : 直接生成字符所代表的进程
exec家族 : 在现有进程环境下生成新进程

三、python的进程编程
1、进程运行环境
对于每个运行的进程,操作系统都会提供一个相关运行环境,一般可以看作是环境变量的集合。当进程启动的时候,环境变量就确定了,只有当前进程可以修改其环境变量。在创建进程时,子进程会得到当前父进程运行环境的一个副本。
在python中,os模块提供了environ属性,用来记录当前进程的运行环境。是一个字典结构,键是环境变量的变量名,值是环境变量的值。

1.1、获取当前环境变量中的PATH值 代码(python 3.0):
import os
path = os.environ.get(‘PATH’)
print(path)

1.2、获取当前进程中所有环境变量 其实就是遍历一下environ属性字典
import os
for key in os.environ.keys:
print (key, ‘:’ os.environ[key])

1.3、修改或生成环境变量
import os
os.environ[“key”] = ‘value’

2、创建进程
python提供了多种方式创建进程,除了在os模块中有丰富的创建进程函数外,还有其他选择。os模块中主要包括system和exec家族函数,用来创建不同需求情况下的进程。
1.1、system函数
system函数是用来创建进程的最快捷方式:
system(command)

代码:
import os
print(os.system(“dir”))

1.2、exec家族函数
exec家族函数包含了8个类似的函数,与system不同,system函数是调用系统内置的命令行程序来执行系统命令,命令结束之后将进程控制权返回给python进程,而exec函数则会替换调用进程,是接管而不是从属。所以,system函数是创建一个可控制进程,相当于多了一个小弟,而exec函数是创建一个进程接管当前进程,干掉大哥自己当大哥。

3、终止进程
Python 提供了多种不同的方式终止进程,return就是其中一种,python脚本遇到最外层的return语句退出的时候,进程就终止了。另外还有两种方法终止进程:sys.exit 和 os.abort

1、sys.exit函数
exit函数是“温和”的结束进程,退出前会执行一些清理工作,并且返回一个值给调用进程(一般是操作系统),由此可以判断程序是正常退出还是出了异常退出。
2、os.abort函数
abort是”暴力”退出,直接给进程发终止信号,不会做相关的清理工作。可以使用signal.signal()来为SIGABORT信号注册不同的信号处理函数。
用abort的地方都可以用exit函数来代替,但当exit不能终止程序或者时间过长的时候,可以用abort来解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值