python线程池库,项目中使用线程池

  python线程池库,项目中使用线程池

  Python线程池及其原理和系统启动一个新线程的成本比较高,因为涉及到和操作系统的交互。在这种情况下,使用线程池可以大大提高性能,特别是当程序中需要创建大量的短命线程时,应该考虑使用线程池。当系统启动时,线程池会创建大量的空闲线程。只要一个程序向线程池提交一个函数,线程池就会启动一个空闲线程来执行它。当函数完成后,线程并不会死亡,而是会再次返回线程池,变成空闲,等待下一个函数的执行。此外,使用线程池可以有效地控制系统中并发线程的数量。当系统中有大量并发线程时,系统性能会急剧下降,甚至Python解释器也会崩溃。线程池中线程的最大数量可以控制系统中并发线程的数量不超过这个数量。

  线程池的使用

  线程池的基类是concurrent.futures模块中的执行器,执行器提供了两个子类,即

  ThreadPoolExecutor和ProcessPoolExecutor,其中ThreadPoolExecutor

  用于创建线程池,而ProcessPoolExecutor用于创建进程池。如果用线程池/进程池来管理并发编程,那么只要把相应的任务函数提交给线程池/进程池,剩下的就由线程池/进程池来完成。

  Exectuor 提供了如下常用方法:

  Submit(fn,*args,**kwargs):将fn函数提交给线程池。*args表示传递给fn函数的参数,*kwargs

  表示作为fn函数的关键字参数传入的参数。map(func,*iterables,timeout=None

  Chunksize=1):这个函数类似于全局函数map(func,*iterables),除了这个函数将立即异步启动多个线程

  Iterables执行地图处理。Shutdown(wait=True):关闭线程池。程序的任务函数提交到线程池后,submit方法会返回一个Future对象,Future。

  类主要用于获取线程任务函数的返回值。由于线程任务将在新线程中异步执行,线程执行的函数相当于一个“未来完成”任务,所以

  用Python未来来表示。Future 提供了如下方法:

  Cancel():取消这个Future所代表的线程任务。如果任务正在执行且无法取消,则方法返回。

  假的;否则,程序将取消任务并返回True。

  Cancelled():返回由Future表示的线程任务是否被成功取消。

  Running():如果这个Future所代表的线程任务正在执行并且不能取消,那么这个方法返回True。

  Done():如果这个函数代表的线程任务被成功取消或执行,这个方法返回True。

  Result(timeout=None):获取这个Future所代表的线程任务最终返回的结果。如果未来

  此方法将阻塞当前线程,其中timeout参数指定阻塞的最大秒数。

  异常(timeout=None):获取未来。

  由表示的线程任务引发的异常。如果任务成功完成且无异常,则该方法返回None。

  Add_done_callback(fn):为这个Future所代表的线程任务注册一个“回调函数”,当任务成功完成时程序会自动触发这个。

  Fn功能。

  当线程池用完时,应该调用线程池的shutdown()方法,这将启动线程池的关闭序列。调用shutdown()方法后,线程池将不再接收新任务,但之前提交的所有任务都将完成。当线程池中的所有任务完成后,线程池中的所有线程都将死亡。

  使用线程池来执行线程任务的步骤如下:

  调用ThreadPoolExecutor类的构造函数创建线程池。将常用函数定义为线程任务。调用ThreadPoolExecutor对象的submit()方法提交线程任务。当您不想提交任何任务时调用。

  ThreadPoolExecutor对象的shutdown()方法关闭线程池。ThreadPoolExecutor(线程池)线程池一些知识点:

  大蟒中ThreadPoolExecutor(线程池)是并行未来模块下的,主线程中可以获取某一个线程执行的状态或者某一个任务执行的状态及返回值。通过使服从返回的是一个将来的对象,它是一个未来可期的对象,通过它可以获悉线程的状态通过使服从提交函数到进程池中,提交(函数名,参数)通过等待()判断线程执行的状态:等待(fs,超时=无,

  return_when=ALL_COMPLETED),等待接受3个参数,fs表示执行的工作序列;超时表示等待的最长时间,超过这个时间即使线程未执行完成也将返回;返回_何时表示等待返回结果的条件,默认为全部_已完成全部执行完成再返回

  超文本传送协议(超文本传输协议的缩写)的是超正析象管(图片Orthicon)请求,所以用线程编写方法一:直接返回处理来自并发。未来导入ThreadPoolExecutor导入请求spool=ThreadPoolExecutor(10)def task(URL):response=requests。get(URL)print(URL,response)URL _ list=( https://www。冰。com , https://www.shihu.com , https://www.sina.com , https://www.baidu.com , https://www.cnblogs.com , 3https://音乐。163 .com/#)

  https://www.sina.com回应[200]https://回应[200]https://回应[200]https://music.163.com/#回应[200]https://回应[200]result

  来自并发.未来导入ThreadPoolExecutor导入request spool=ThreadPoolExecutor(10)def task(URL):response=requests。获取(URL)#下载页面return responsedef done(future,*args,* * kwargs):response=future。结果()#取得将来的对象进行操作print(response.status_code,响应。内容)url_list=( https://www。冰。“com”,“https://www.jd.com”,“https://www.sina.com”,“https://www.baidu.com”,“https://www.cnblogs.com”,“https://music.163.com/#”)对于URL _ list中的URL:v=pool。提交(任务,url) #获得一个返回值,其实就是访问全球资源定位器(统一资源定位器)的响应五。添加完成回调(完成)

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: