线程池的要点分析

线程池的要点分析

1、考虑建立线程数量

2、线程池的状态

    with open('flog') as f:
f.write()

3、关闭线程

实例(简单实例)

原理:

1:创建10个线程对象
2:queue队列拿取线程。可用:拿;否则:等待
3:线程执行完毕,归还给线程池
#!/usr/bin/env python
# coding:utf-8
import  Queue
import threading
"""
1:创建10个线程对象
2:queue队列拿取线程。可用:拿;否则:等待
3:线程执行完毕,归还给线程池
"""
class ThreadPool(object):
    # 设置一个默认参数max_num
    def __init__(self,max_num=20):
        # 创建队列
        self.queue = Queue.Queue(max_num)
        # 循环创建1个对象
        for i in xrange(max_num):
            self.queue.put(threading.Thread)

    def get_thread(self):
        return self.queue.get()
    # 使用类
    def add_thread(self):
        self.queue.put(threading.Thread)

# 创建对象
# 创建1最多能接收10个线程的队列
pool = ThreadPool(10)

def func(arg,p):
    print arg
    import time
    time.sleep(2)
    p.add_thread()
# 300个任务要执行
for i in xrange(300):
    # 获取一个线程,
    thread = pool.get_thread()
    # 执行这个线程
    t = thread(target=func,args=(i,pool))
    t.start()

实例(twisted.python.threadpool)

#!/usr/bin/env python
# coding:utf-8
import  contextlib
doing = []

@contextlib.contextmanager
def show(li,item):
    # print "before"
    doing.append(item)
    yield
    doing.remove(item)

print len(doing)

with show(doing,1):
    print 'with in'
    print len(doing)

print len(doing)

 

posted @ 2016-01-14 15:25  曹小贱  阅读(232)  评论(0编辑  收藏  举报