首页 > 编程语言 > 详细

python_way day11 线程池

时间:2016-07-21 06:12:27      阅读:291      评论:0      收藏:0      [点我收藏+]

python_way day11  

线程池

 

 

为什么需要线程池

线程多一些固然好,但是过多的线程反倒影响系统的负荷,所以我们就需要创建合适多的线程,哪我们把线程放到哪里?这时就放到线程池中。

 

线程池中存放着固定数量的线程池,谁需要使用线程,就从这个容器中取。取空了就要等待,什么时候有什么时候拿去用

 

但是python中没有给线程池提供比较好的方法,所以我们要自己写,或者使用第三方模块

 

 

import threading
import queue
import time
class Mythreadpoll:                #自定义一个线程池类
    def __init__(self,maxsize=5):
        """
        初始化类,并生成队列,将线程放到队列中,这个队列就可以作为线程池
        :param maxsize:  传入一个数值,这个数作为线程池最大线程数
        """
        self.maxsize = maxsize
        self._q = queue.Queue(maxsize)
        for i in range(maxsize):
            self._q.put(threading.Thread)  #把线程类存入到这个队列中

    def get_thread(self):
        """
        获取线程池中的线程
        :return:
        """
        return self._q.get(timeout=1)

    def add_thread(self):
        """
        因为取走一个线程就少一个线程,所以需要向线程池中添加线程
        :return:
        """
        self._q.put(threading.Thread)

def f1(arg,p):      #接受poll 然后执行添加add_thread方法
    time.sleep(1)
    p.add_thread() #线程就是执行这个任务,每一个任务执行完就往线程池中添加一个
    print(arg)


poll = Mythreadpoll()
for i in range(30):
    t = poll.get_thread()           #获取的线程的类,每从队列中获取一个线程类队列中就少一个线程类,这样执行5次后队列中就空了,到这里就会阻塞住
    obj = t(target=f1,args=(i,poll))    #传入参数实例化这个线程类,将poll传进去
    obj.start()                     #实行线程类的start方法

  

python_way day11 线程池

原文:http://www.cnblogs.com/python-way/p/5690225.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!