python 进程池 等待数量_【2020Python修炼记】python并发编程(六)补充—进程池和线程池...

1、

2、 为啥要有 进程池和线程池

进程池来控制进程数目,比如httpd的进程模式,规定最小进程数和最大进程数

3、创建进程池的类pool

如果指定numprocess为3,则进程池会从无到有创建三个进程,然后自始至终使用这三个进程去执行所有任务,不会开启其他进程

pool([numprocess [,initializer [, initargs]]]):创建进程池

参数介绍:

numprocess:要创建的进程数,如果省略,将默认使用cpu_count()的值

initializer:是每个工作进程启动时要执行的可调用对象,默认为none

initargs:是要传给initializer的参数组

方法介绍:

主要方法:

p.apply(func [, args [, kwargs]])

在一个池工作进程中执行func(*args,**kwargs),然后返回结果。

需要强调的是:此操作并不会在所有池工作进程中并执行func函数。如果要通过不同参数并发地执行func函数,必须从不同线程调用p.apply()函数或者使用p.apply_async()

p.apply_async(func [, args [, kwargs]])

在一个池工作进程中执行func(*args,**kwargs),然后返回结果。此方法的结果是asyncresult类的实例,callback是可调用对象,接收输入参数。

当func的结果变为可用时,将理解传递给callback。callback禁止执行任何阻塞操作,否则将接收其他异步操作中的结果。

p.close()

关闭进程池,防止进一步操作。如果所有操作持续挂起,它们将在工作进程终止前完成

p.jion()

等待所有工作进程退出。此方法只能在close()或 teminate()之后调用

4、进程池和线程池

from concurrent.futures import threadpoolexecutor, processpoolexecutor

import time

import os

# pool = threadpoolexecutor(5) # 池子里面固定只有五个线程

# 括号内可以传数字 不传的话默认会开设当前计算机cpu个数五倍的线程

pool = processpoolexecutor(5)

# 括号内可以传数字 不传的话默认会开设当前计算机cpu个数进程

"""

池子造出来之后 里面会固定存在五个线程

这个五个线程不会出现重复创建和销毁的过程

池子造出来之后 里面会固定的几个进程

这个几个进程不会出现重复创建和销毁的过程

池子的使用非常的简单

你只需要将需要做的任务往池子中提交即可 自动会有人来服务你

"""

def task(n):

print(n,os.getpid())

time.sleep(2)

return n**n

def call_back(n):

print('call_back>>>:',n.result())

"""

任务的提交方式

同步:提交任务之后原地等待任务的返回结果 期间不做任何事

异步:提交任务之后不等待任务的返回结果 执行继续往下执行

返回结果如何获取???

异步提交任务的返回结果 应该通过回调机制来获取

回调机制

就相当于给每个异步任务绑定了一个定时炸弹

一旦该任务有结果立刻触发爆炸

"""

if __name__ == '__main__':

# pool.submit(task, 1) # 朝池子中提交任务 异步提交

# print('主')

t_list = []

for i in range(20): # 朝池子中提交20个任务

# res = pool.submit(task, i) #

res = pool.submit(task, i).add_done_callback(call_back)

# print(res.result()) # result方法 同步提交

# t_list.append(res)

# 等待线程池中所有的任务执行完毕之后再继续往下执行

# pool.shutdown() # 关闭线程池 等待线程池中所有的任务运行完毕

# for t in t_list:

# print('>>>:',t.result()) # 肯定是有序的

"""

程序有并发变成了串行

任务的为什么打印的是none

res.result() 拿到的就是异步提交的任务的返回结果

"""

参考资料:

希望与广大网友互动??

点此进行留言吧!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值