进程总结, 快速理解进程,进程池

15 篇文章 0 订阅
4 篇文章 0 订阅

进程: 程序运行在操作系统上的一个实例, 就称之为进程.进程需要相应的系统资源:内存,时间片,pid.

 

创建进程:

    1. 首先要导入multiprocessing中的Process;

    2. 创建一个Process对象

    3. 创建Process对象时, 可以传递参数;

4. 使用start()启动进程;

5. 结束进程.

 

Process语法结构:

    Process([group [, targrt [, name [, args [, kwargs]]]]])

    target: 如果传递了函数的引用, 可以让这个子进程就执行函数中的代码

    args: 给targrt指定的函数传递参数, 以元组的形式进行传递

    kwargs: 给targrt指定的函数传递参数, 以字典的形式进行传递

    name: 给进程设定一个名字, 可以省略

    group: 指定进程组, 大多数情况下用不到

    Process 创建的实例对象的常用方法有:

    start() : 启动子进程实例

    is_alive(): 判断进程子进程是否还活着

    join(timeout): 是否等待子进程执行结束, 或者等待多时秒

    terminate():不管任务是否完成, 立即终止子进程

Process 创建的实例对象的常用属性:

    name: 当前进程的别名, 默认为Process-N, N为从1开始递增的整数

    pid: 当前进程的pid(进程号)

注意: 进程之间不共享全局变量

进程之间的通信-Queue

    在初始化Queue()对象时, (例如q=Queue(),若在括号中没有指定最大可接受的消息数量, 或数量为负值时, 那么

就代表可接受的消息数量没有上限-直到内存的尽头)

    Queue.qsize(): 返回当前队列包含的消息数量.

    Queue.empty(): 如果队列为空, 返回True,反之False.

    Queue.full(): 如果队列满了, 返回True, 反之False.

    Queue.get([block[, timeout]]): 获取队列中的一条消息, 然后将其从队列中移除, block默认值为True.

    如果block使用默认值, 且没有设置timeout(单位秒), 如果队列为空, 此时程序将被阻塞(停在读取状态), 直到从消息队列读到消息

为止, 如果设置了timeout, 则会等待timeout秒, 若还没有读取到任何消息, 则抛出"Queue.Empty"异常.

    如果block值为False, 消息队列如果为空, 则会立刻抛出"Queue.Empty"异常;

    Queue.get_nowait(): 相当Queue.get(False);

    Queue.put(item, [block[, timeout]]): 将item消息写入队列, block默认值为True;

    如果block使用默认值, 且没有设置timeout(单位秒), 消息队列如果已经没有空间可写入, 此时程序将被阻塞(停在写入状态), 直到消息队列腾出空间为止, 如果设置了timeout, 则会等待timeout秒, 若还没空间, 则抛出'Queue.Full'异常

    如果block值为False, 消息队列如果没有空间写入, 则会立刻抛出'Queue.Full'异常;

    Queue.put_nowait(item); 相当Queue.put(item, False);

    进程间通信Demo:

 

进程池 Pool

multiprocessing.Pool常用函数解析:

    apply_async(func, argsl kwds]) :使用非阻塞方式调用func (并行执行,堵塞方式必须等上一个

进程退出才能执行下一个进程) , args为传递给func的参数列表, kwds为传递给fur的关键字参数列表;

    close() :关闭Pool,使其不再接受新的任务;

    terminate():不管任务是否完成,立即终止;

    join():主进程阻塞,等待子进程的退出,必须在close或terminate之后使用;

进程池中使用Queue

    如果要使用Pool创建进程,就需要使用multiprocessing.Manager()中的Queue() ,而不是 multiprocessing.Queue(),否则会得到一

条如下的错误信息:

    RuntimeError: Queue objects should only be shared between processes through inheritance.

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值