【python爬虫 系列】10.线程池与进程池

第十节:线程池与进程池
10.1使用线程池与进程池

线程池或进程池是用于在程序中优化 线程池里有多个线程,不用我们
和简化线程/进程的使用。 创建和销毁,这样资源消耗就会
很小,减少了cpu的压力。

通过池,你可以提交任务给executor。
池由两部分组成,一部分是内部的队
列,存放着待执行的任务;另一部分
是一系列的进程或线程,用于执行这
些任务。

池的概念主要目的是为了重用:让线
程或进程在生命周期内可以多次使用。
它减少了创建创建线程和进程的开销,
提高了程序性能。重用不是必须的规
则,但它是程序员在应用中使用池的
主要原因。

1)concurrent模块
Python3.2带来了concurrent.futures 模块(不需要下载,标准库),这个模块具有线程池和进程池、
管理并行编程任务、处理非确定性的执行流程、进程/线程同步等功能。(还可以和异步耦合,目前最快方式:多进程下包含多线程,多线程里面包含异步)
此模块由以下部分组成:

concrent.futures.Executor:

这是一 个虚拟基类,提供了异步执行的方法。

submit(function, argument):  #提交

调度函数(可调用的对象)的执行,将argument作为参数传入。

map(function, argument):

将argument作为参数执行函数,以异步的方式。

shutdown(Wait=True):

发出让执行者释放所有资源的信号。

concurrent.futures.Future:

其中包括函数的异步执行。Future对象是submit任务(即带有参数的functions) 到executor的实例。

Executor是抽象类,可以通过子类访问,即线程或进程的ExecutorPools。
因为,线程或进程的实例是依赖于资源的任务,所以最好以“池”的形式将他
们组织在 一起, 作为可以重用的launcher或 executor。

2)准备工作
current.Futures模块提供了两种Executor的子类,
各自独立操作一个线程池和一个进程池。这两个子类分别是:

concurrent.futures.ThreadPoolExecutop(max_ Workers)
concurrent.futures. ProcessPoolExecutor(max_ workers) 
max_ workers参数表示最多有多少个worker并行执行任务。

单线程裸奔,线程池执行cpu密集型比较:

import concurrent
from concurrent import futures
import time 

number_list=[1,2,3,4,5,6,7,8,9,10]


def evaluate_item(x):
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值