进程与线程的概念
进程,是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竟争计算机系统资源的基本单位。每一个进程都有一个自己的地址空间,即进程空间或(虚空间)。进程空间的大小只与处理机的位数有关,一个 16 位长处理机的进程空间大小为216 ,而 32 位处理机的进程空间大小为 232 。进程至少有 5 种基本状态,它们是:初始态,执行态,等待状态,就绪状态,终止状态。
线程,在网络或多用户环境下,一个服务器通常需要接收大量且不确定数量用户的并发请求,为每一个请求都创建一个进程显然是行不通的,无论是从系统资源开销方面或是响应用户请求的效率方面来看。因此,操作系统中线程的概念便被引进了。线程,是进程的一部分,一个没有线程的进程可以被看作是单线程的。线程有时又被称为轻权进程或轻量级进程,也是 CPU 调度的一个基本单位。
进程拥有一个完整的虚拟地址空间,不依赖于线程而独立存在;反之,线程是进程的一部分,没有自己的地址空间,与进程内的其他线程一起共享分配给该进程的所有资源。
1. 多进程(multiprocessing
)
由于Python是跨平台的,自然也提供了一个跨平台的多进程支持。multiprocessing
模块就是跨平台版本的多进程模块。
(1)Process类:
multiprocessing
模块提供了一个Process
类来代表一个进程对象:Process ( target , args ),target表示调用对象,args表示调用对象的位置参数元组。
示例1:创建函数并将其作为单个进程,启动这个子进程并等待其结束;
from multiprocessing import Process
import os
def worker(name):
print("子进程是 %s:%s"%(name,os.getpid()))
if __name__ == "__main__":
print("父进程:%s" %os.getpid())
#target表示调用对象,args表示调用对象的位置参数元组。
p = Process(target = worker, args = ('p1',))
#启动子进程
p.start()
#等待子进程结束后在继续往下运行,通常用于进程间的同步
p.join()
print('子进程运行结束!')
运行结果:
父进程:948
子进程是 p1:2928
子进程运行结束!
如果没有p.join(),主程序就不会等待子进程运行结束在往下执行,而是会直接运行下面的内容。
from multiprocessing import Process
import os
def worker(name):
print("子进程是 %s:%s"%(name,os.getpid()))
if __name__ == "__main__":
print("父进程:%s" %os.getpid())
#target表示调用对象,args表示调用对象的位置参数元组。
p = Process(target = worker, args = ('p1',))
#启动子进程
p.start()
print('子进