使用with方式创建线程池,任务执行完毕之后,会自动关闭资源 , 否则就需要手动关闭线程池资源 

import threading, time
from concurrent.futures import ThreadPoolExecutor, as_completed class MyTask(threading.Thread):
"""
使用python线程的方法
""" def __init__(self, thread_id):
threading.Thread.__init__(self)
self.thread_id = thread_id def run(self):
while 1:
print('%s线程正在运行。。。。。。。。' % self.thread_id)
time.sleep(1) class MyThreadPool(object):
"""
使用python线程池的两种方式
""" def __init__(self):
"""init方法,构造测试数据"""
self.param_data = []
for i in range(1000):
self.param_data.append(str(i)) def target_task(self, param):
"""目标方法"""
print(threading.currentThread().name) # 打印当前线程的name
# print(param)
return param + '----------task' def execute_thread_pool_method1(self):
"""使用线程池的第一种方式"""
'''创建一个线程池,里面有10个线程'''
with ThreadPoolExecutor(max_workers=10, thread_name_prefix='test') as tpe: # 使用with,会自动关闭任务
result = [] # 缓存线程任务执行结果 for i in self.param_data:
r = tpe.submit(self.target_task, i) # submit提交任务,执行的顺序是乱的
result.append(r) for r in as_completed(result):
print(r.result()) tpe.shutdown() def execute_thread_pool_method2(self):
"""使用线程池的第二种方式"""
'''创建一个线程池,里面有10个线程'''
with ThreadPoolExecutor(10) as tpe:
# 结果的数据类型就是list
result = tpe.map(self.target_task, self.param_data)
for r in result: # 对结果集进行处理
print(r) if __name__ == '__main__':
my_task = MyTask(1) my_task.setDaemon(True) # 将my_task这个线程设置成守护线程
my_task.start()
print(threading.active_count()) # 打印活着的线程数 # my_thread_pool = MyThreadPool()
# my_thread_pool.execute_thread_pool_method1()
# my_thread_pool.execute_thread_pool_method2()

python线程池示例的更多相关文章

  1. 自定义高级版python线程池

    基于简单版创建类对象过多,现自定义高级版python线程池,代码如下 #高级线程池 import queue import threading import time StopEvent = obje ...

  2. 对Python线程池

    本文对Python线程池进行详细说明介绍,IDE选择及编码的解决方案进行了一番详细的描述,实为Python初学者必读的Python学习经验心得. AD: 干货来了,不要等!WOT2015 北京站演讲P ...

  3. Python 线程池(小节)

    Python 线程池(小节) from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor import os,time, ...

  4. python线程池ThreadPoolExecutor(上)(38)

    在前面的文章中我们已经介绍了很多关于python线程相关的知识点,比如 线程互斥锁Lock / 线程事件Event / 线程条件变量Condition 等等,而今天给大家讲解的是 线程池ThreadP ...

  5. python线程池及其原理和使用

    python线程池及其原理和使用 2019-05-29 17:05:20 whatday 阅读数 576 系统启动一个新线程的成本是比较高的,因为它涉及与操作系统的交互.在这种情形下,使用线程池可以很 ...

  6. Python线程池与进程池

    Python线程池与进程池 前言 前面我们已经将线程并发编程与进程并行编程全部摸了个透,其实我第一次学习他们的时候感觉非常困难甚至是吃力.因为概念实在是太多了,各种锁,数据共享同步,各种方法等等让人十 ...

  7. 一个python线程池的源码解析

    python为了方便人们编程高度封装了很多东西,比如进程里的进程池,大大方便了人们编程的效率,但是默认却没有线程池,本人前段时间整理出一个线程池,并进行了简单的解析和注释,本人水平有限,如有错误希望高 ...

  8. Python之路(第四十六篇)多种方法实现python线程池(threadpool模块\multiprocessing.dummy模块\concurrent.futures模块)

    一.线程池 很久(python2.6)之前python没有官方的线程池模块,只有第三方的threadpool模块, 之后再python2.6加入了multiprocessing.dummy 作为可以使 ...

  9. Python线程池及其原理和使用(超级详细)

    系统启动一个新线程的成本是比较高的,因为它涉及与操作系统的交互.在这种情形下,使用线程池可以很好地提升性能,尤其是当程序中需要创建大量生存期很短暂的线程时,更应该考虑使用线程池. 线程池在系统启动时即 ...

随机推荐

  1. 主流架构 : MVP

    1 背景 MVC 平时开发APP时会发现,activity职责非常重.以MVC角度来看: M:model数据操作层(网络请求,耗时操作,数据存取,其他逻辑操作) V:view,指xml布局文件,其实并 ...

  2. leetcode 374猜数字大小

    // Forward declaration of guess API. // @param num, your guess // @return -1 if my number is lower, ...

  3. PriorityBlockingQueue 源码分析

    PriorityBlockingQueue PriorityBlockingQueue 能解决什么问题?什么时候使用 PriorityBlockingQueue? 1)PriorityBlocking ...

  4. 前后端分离项目中后台集成shiro需要注意的二三事

    1. 修改 Shiro 认证失败后默认重定向处理问题 a. 继承需要使用的 ShiroFilter,重载 onAccessDenied() 方法: @Override protected boolea ...

  5. 002-localStorage和sessionStorage操作

    一.概述 HTML5 提供了两种在客户端存储数据的新方法: localStorage - 没有时间限制的数据存储 一直存在除非用户手动清除缓存;是基于域的,任何该域下的所有页面都可访问localSto ...

  6. charles_02_模拟弱网测试

    前言 用户使用app的场景是多变的,不一定稳定在WiFi或者4G网络下.大多数用户会在地铁.电梯等弱网情况下使用app,这些弱网情况下app常会出现一些数据丢失.闪退.页面展示不友好等情况.在测试过程 ...

  7. 20190920 On Java8 第二十章 泛型

    第二十章 泛型 多态的泛化机制: 将方法的参数类型设为基类: 方法以接口而不是类作为参数: 使用泛型: 泛型实现了参数化类型 简单泛型 Java 泛型的核心概念:你只需告诉编译器要使用什么类型,剩下的 ...

  8. 常用js方法封装使用

    // 冒泡排序 export function bubbleSort(arr) { let i = arr.length - 1; while (i > 0) { let maxIndex = ...

  9. A dreamstart的催促 (快速幂) B TRDD got lost again

    A   dreamstart的催促 链接:https://ac.nowcoder.com/acm/contest/322/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ ...

  10. 如何在CentOS 7上安装newman

    前提:先安装nodejs,详见:如何在CentOS 7上安装Node.js和npm #sudo npm install -g newman 结果: /usr/local/bin/newman -> ...