四、python高级:进程

一、使用fork( )创建子进程(不能跨平台,只在Linux下执行)

1、编写完毕的代码,在没有运行的时候,称之为程序, 正在运行着的代码,称为进程,

 进程,除了包含代码以外,还有需要运行的环境等,所以和程序是有区别的

2、使用os模块的fork( )函数创建一个子进程,主进程从一开始导入import os 开始执行,即从第一行开始执行,子进程从第四行os.fork( )创建出来开始进行,两个进程下面的代码完全相同,但是两个进程分开各自执行各自的代码,互不干扰。

3、主进程不会等待 fork( ) 函数创建出来的子进程

4、主进程的进程标识码大于0,子进程的进程标识码为0

示例:主进程从头开始执行,子进程从fork创建出来开始执行,分开代码执行,互不干扰,

          且主进程不会等待 fork( ) 函数创建出来的子进程

5、getpid( )、getppid( )

 getpid( )返回当前进程标识码 ,   getppid( ) 返回父进程标识码

注意:

        1、主进程的进程标识码 > 0,  主进程没有父进程,所以用getpid( )查看本身的进程标志码

        2、子进程有父进程,本身的进程标识码用getpid( )查询,父进程的用getppid( )查询

        3、父进程中 os.fork( ) 的返回值,就是刚刚创建出来的子进程的进程标志码

5、全局变量在多个进程中不共享

多进程中,每个进程中所有数据(包括全局变量)都各有拥有一份,互不影响。

进程可以完成多任务,但是,进程与进程之间是独立的,进程和进程之间想要实现通信,需要网络。

 

二、使用Process创建子进程(可跨平台使用)

1、导入模块,创建一个Process实例,用start( )方法启动

  p=Process( target = test )   #创建出子进程,当子进程被启动后,会去执行 test 函数的内容

  p.start( )   #开启子进程,执行函数内容,主进程继续向下执行,子进程去执行函数内容,执行完子程序消失

 

2、在创建子进程的时候并传递参数

3、使用 Process 创建出来的子进程,主进程会等待子进程结束以后,主进程才会结束( 注意是结束,而不是继续执行),而使用fork( )创建出来的子进程,主进程不会对子进程等待

4、join( ) 方法,使主进程等待子进程结束后再继续往下运行,通常用于进程间的同步。

     也可以 join(time):等待子进程 time 秒,主进程继续向下执行,若不写参数,默认就是等待子进程结束

5、实例:

一般使用元组进行传递参数,元组中的“xiaohua”和“18”分别传给了 test 函数的形参name和age,而kwargs={ "m":"18" }则传给了关键字参数 **kwargs

  也可以使用列表来传参:

6、通过类创建子进程

       

 

三、进程池

 

四、进程间通信

1、队列:先进先出,可以存储各种数据类型

2、队列的相关操作

q = Queue( 3 )  创建队列,并指定队列的容量大小为 3(不指定,默认为无限多个)

q.qsize( )       查看队列里有多少个内容

q.put( )   向队列中放入内容                                    q.put_nowait( )  以非阻塞的方式,向队列中放入内容

q.get( )   从队列出取出内容(先进的先出)         q.get_nowait( )  以非阻塞的方式,从队列出取出内容

q.empty( )   判断队列是否为空,为空返回True

q.full( )    判断队列是否为满,为满返回True

3、使用队列,完成进程间的数据通信

 

4、在进程池中使用队列进行通信,需要从 multiprocessing 导入 Manager,通过 q = Manager( ).Queue( )创建队列

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值