【2020Python修炼记】python并发编程(六)补充—进程池和线程池
2021-02-05 12:16
标签:hide pen init rom 不同 tpi == isp class 如果指定numprocess为3,则进程池会从无到有创建三个进程,然后自始至终使用这三个进程去执行所有任务,不会开启其他进程 参数介绍: 方法介绍: 参考资料: https://www.cnblogs.com/linhaifeng/articles/7428874.html#_label9 【2020Python修炼记】python并发编程(六)补充—进程池和线程池 标签:hide pen init rom 不同 tpi == isp class 原文地址:https://www.cnblogs.com/bigorangecc/p/12790061.html1、进程池的作用
进程池来控制进程数目,比如httpd的进程模式,规定最小进程数和最大进程数
2、创建进程池的类Pool
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()之后调用
3、进程池和线程池
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) #
文章标题:【2020Python修炼记】python并发编程(六)补充—进程池和线程池
文章链接:http://soscw.com/index.php/essay/51324.html