zoukankan      html  css  js  c++  java
  • 第二十七篇、自定义线程池之简单的线程池

     1 二、    #!/usr/bin/env python
     2 #-*- coding:utf-8 -*-
     3 import threading
     4 import queue
     5 import time
     6 
     7 class ThreadPool(object):
     8     def __init__(self,max_num = 20):
     9         self.queue = queue.Queue(max_num) #创建一个最大长度为20的队列
    10         for i in range(max_num):  #往队列里面创建了20个位置的队列,每个位置放了一个Thread类名,指向内存地址相同
    11             self.queue.put(threading.Thread)
    12 
    13     def get_thread(self):
    14         return self.queue.get()#这里的self指代的就是上面的这个队列
    15 
    16     def add_thread(self):
    17         self.queue.put(threading.Thread)
    18 
    19 def func(pool,a1):
    20     time.sleep(2)
    21     print(a1)
    22     pool.add_thread()
    23 
    24 
    25 p = ThreadPool(10)  #只要创建对象就会执行构造方法  在队列中创建类
    26 for i in range(100):
    27     #获得类
    28     ret = p.get_thread()  #这里ret就等于类名threading.Thread
    29     t = ret(target=func,args=(p,i,))  #这里t 等于threading.Thread(target=func),相当于创建了一个线程
    30     t.start()  #相当于开始了执行线程。

    上面执行流程:

    1、首先创建一个队列,这个队列的最大长度为20

    2、在每个队列里面放入threading.Thread类

    3、给队列添加两个方法,方法一是取队列中的类;方法二 往队列中放置类

    4、p = ThreadPool(10)   创建对象,并且指定每次执行多少个对象

    5、去出类创建线程,并且开始执行func方法,执行完毕之后再把这个类放入到队列中

    缺点:

    从队列中拿出来类,创建了线程对象,执行完毕之后,这个线程对象并没有放入到队列之中,而是把类放入到了队列之中,线程放入到了内存之中,等待垃圾回收机制回收

    一、      #!/usr/bin/env python
    #-*- coding:utf-8 -*-
    import threading
    import queue
    import time

    class ThreadPool(object):
       
    def __init__(self,max_num = 20):
           
    self.queue = queue.Queue(max_num) #创建一个最大长度为20的队列
           
    for i in range(max_num)#往队列里面创建了20个位置的队列,每个位置放了一个Thread类名,指向内存地址相同
               
    self.queue.put(threading.Thread)

       
    def get_thread(self):
           
    return self.queue.get()#这里的self指代的就是上面的这个队列

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

    def func(pool,a1):
       
    time.sleep(2)
       
    print(a1)
       
    pool.add_thread()


    p
    = ThreadPool(10#只要创建对象就会执行构造方法  在队列中创建类
    for i in range(100):

            #获得类
       
    ret = p.get_thread()  #这里ret就等于类名threading.Thread
       
    t = ret(target=func,args=(p,i,))  #这里t 等于threading.Thread(target=func),相当于创建了一个线程
       
    t.start()  #相当于开始了执行线程。这里注意,执行完毕之后要把这个线程放回到线程池里面

  • 相关阅读:
    汇编--基础分析:数据段在内存中的存放及空间
    汇编语言(王爽)第六章检测点与实验5
    C语言经典例题100(22~40)
    C:数组小结(3)
    随机不重复的取数组元素,并赋值给div使用
    关于Apple设备私有的apple-touch-icon属性详解
    测试你女友是否跟你结婚插件的源码
    CSS子元素设置margin-top作用于父容器?
    hybrid app开发中:苹果移动设备实用Meta标签
    chromium 修改chromium的设置选项
  • 原文地址:https://www.cnblogs.com/pyrene/p/6491047.html
Copyright © 2011-2022 走看看