进程:
Python 解释器有一个全局解释器锁(PIL),导致每个 Python 进程中最多同时运行一个线程,因此 Python 多线程程序并不能改善程序性能,不能发挥多核系统的优势,可以通过这篇文章了解。
但是多进程程序不受此影响, Python 2.6 引入了 multiprocessing 来解决这个问题。这里介绍 multiprocessing 模块下的进程,进程同步,进程间通信和进程管理四个方面的内容。 这里主要讲解多进程的典型使用,multiprocessing 的 API 几乎是完复制了 threading 的API, 因此只需花少量的时间就可以熟悉 threading 编程了
由于GIL的存在,很多Python专家建议,多使用多进程,以便利用多核资源,而不是使用多线程。
下面来下一个简单生成线程的实例,如下:
import multiprocessing import time def run(name): time.sleep(2) print("hello",name) if __name__ == "__main__": for i in range(5): p = multiprocessing.Process(target=run,args=("alex",)) p.start()
执行结果如下:
hello alex
hello alex
hello alex
hello alex
hello alex
上面一个程序就是多进程的实例,启动了5个进程,可见,多进程是multiprocessing模块;
multiprocessing.cpu_count()统计CPU的个数,即同时可以运行几个进程。cpu_count()统计CPU的个数,即几核CPU。
在Linux上,每一个进程都是由父进程启动的,根进程1,__init__()负责启动;父进程,每个进程必定有一个父进程。
下面我们来写一个程序,来看看进程里面的一些概念:
import multiprocessing,os,time def info(title): print(title) print("Module name:",__name__) print("parent processing:",os.getppid()) #获取线程父线程的PID print("son processing:",os.getpid()) #获取线程的子线程PID print(" ") def func(name): info("