一、fork创建子进程(不能跨平台,只在Linux下执行,windows下不执行)
编写完毕的代码,在没有运行的时候,称之为程序, 正在运行着的代码,就成为进程
进程,除了包含代码以外,还有需要运行的环境等,所以和程序是有区别的
1、主进程从一开始导入import os 开始执行,子进程从os.fork()创建出开始进行,会分开各自执行各自的代码,互不干扰。
2、如果主进程先退出了,说明进程已经退出了,不会因为子进程没有结束,主进程去等待。
3、主进程返回的值是大于0的,子进程的返回值是等于0的。
示例:主进程从头开始执行,子进程从fork创建出来开始执行,分开代码执行,互不干扰,
都执行完后,主进程、父进程都该执行print(“----over-----”)了,所以执行两遍
4、getpid、getppid
getpid返回当前进程标识 , getppid返回父进程标识
注意:
1、主进程>0, 主进程没有父类所以用getpid查看
2、子进程可有父类,本身用getpid,父类用getppid
3、父进程中fork的返回值,就是刚刚创建出来的子进程的id
5、全局变量在多个进程中不共享
多进程中,每个进程中所有数据(包括全局变量)都各有拥有一份,互不影响。
进程可以完成多任务,但是,进程与进程之间是独立的,进程和进程之间想要实现通信,需要网络。
二、Process创建子进程(可跨平台使用,常用)
1、p=Process(target=test) #创建出子进程,去执行 test 函数内容
p.start() #开启子进程,执行函数内容,主进程继续向下执行,子进程去执行函数内容,执行完消失
2、在创建子进程的时候并传递参数
3、使用process时主进程执行完后会等待子进程结束以后,程序才会最终结束,而使用fork的时候,主进程结束就结束了,
它不会等待子进程结束才结束的。
4、join()方法执行到这时,主进程等待子进程结束后再继续往下运行,通常用于进程间的同步。
join(参数time):等待子进程多少秒,主进程才继续向下执行;
5、实例:
6、通过类创建子进程