首页 > 编程语言 > 详细

Python 线程池

时间:2016-09-02 00:24:34      阅读:326      评论:0      收藏:0      [点我收藏+]

python默认没有提供线程池的功能,所以要想使用线程池,就必要使用第三方的模块或者自定义线程

线程并不是越多越好,线程的上下文切换会影响到服务器的性能

线程池:一个容器,有最大数,取一个少一个,无线程时等待,线程执行完毕,交还线程

 

__author__ = alex
#coding:utf-8
import queue
import threading
import time

class ThreadPool:
    def __init__(self,maxsize=5):
        self.maxsize = maxsize
        self._q = queue.Queue()
        for i in range(5):
            self._q.put(threading.Thread)

    def get_thread(self):
        return self._q.get()

    def add_thread(self):
        self._q.put(threading.Thread)

pool = ThreadPool(5)

def task(args,p):
    print (args )
    time.sleep(2)
    p.add_thread()


for i in range(100):
    t = pool.get_thread()
    obj = t(target=task,args =(i,pool))
    obj.start()

这个简单的程序实现了线程池的基本功能,每次只能有5个线程产生,但是也有很大的局限性,1,线程不能回收回来,每次产生了5个线程,但是线程确不能收回来(垃圾回收机制回收回来),每5个线程结束以后,只是重新生成了新的线程;2,如果需要的线程数range(100)小于我们定义的创建池的数值(5),那就浪费了,根本没有必要初始就创立5个线程(线程池一下子就开到了最大)。

 

Python 线程池

原文:http://www.cnblogs.com/python-study/p/5828017.html

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