zoukankan      html  css  js  c++  java
  • 潭州课堂25班:Ph201805201 并发(进程与线程池) 第十四课 (课堂笔记)

    循环执行一个线程

    # -*- coding: utf-8 -*-
    # 斌彬电脑
    # @Time : 2018/7/20 0020 5:35
    import threading
    import queue
    import time
    
    class my_th(threading.Thread):
    
        def __init__(self):
            super().__init__()
            self.daemon = True         #  守护模型(主线程结束,所有子线程结束)
            self.queue = queue.Queue()
    
    
        def run(self):
            while True:
                fun = self.queue.get()     #  得到函数对象,
                fun()                   #  运行函数
                self.queue.task_done()
        #  队列中有任务,会不断的依次运行,
    
    
        def appy(self,fun):            #   添加任务
            self.queue.put(fun)
    
        def join(self, timeout=None):   #  重写 join 方法
            self.queue.join()            #  把队列的 join 方法写在里边
        #   当队列任务执行完毕就结,
    
    def fun_1():
        time.sleep(2)
        print('aaaa')
    
    t = my_th()
    t.start()
    t.appy(fun_1)
    t.appy(fun_1)
    t.appy(fun_1)
    t.appy(fun_1)
    
    t.join()    # 这里的 join 不是等待线程,而是等待队列任务执行完
    
    
    #  始终只有一个线程在运行,
    

    上边是任务有多个,但线程池中只有一个线程,2秒打印一个,

     自定义线程池

    # -*- coding: utf-8 -*-
    # 斌彬电脑
    # @Time : 2018/7/20 0020 5:35
    import threading
    import queue
    import time
    
    class my_th(threading.Thread):
    
        def __init__(self,num):
            super().__init__()
            self.queue = queue.Queue()
            for i in range(1,num+1):
                t = threading.Thread(target=self.run, name='thread_{}'.format(i))
                t.daemon = True
                t.start()
    
        def run(self):
            while True:
                fun = self.queue.get()     #  得到函数对象,
                fun()                   #  运行函数
                self.queue.task_done()
        #  队列中有任务,会不断的依次运行,
    
    
        def appy(self,fun):            #   添加任务
            self.queue.put(fun)
    
        def join(self, timeout=None):   #  重写 join 方法
            self.queue.join()               #  把队列的 join 方法写在里边
        #   当队列任务执行完毕就结,
    
    def fun_1():
        time.sleep(2)
        print('aaaa')
    
    t = my_th(5)        #   () 创建线程个数,
    t.appy(fun_1)
    t.appy(fun_1)
    t.appy(fun_1)
    t.appy(fun_1)
    t.appy(fun_1)
    t.appy(fun_1)
    
    t.join()    # 这里的 join 不是等待线程,而是等待队列任务执行完
    

      

    进程池

    # import multiprocessing
    # from multiprocessing import Pool  # py自带的进程池
    import time
    from multiprocessing.dummy import Pool          #  线程池
    from multiprocessing.pool import ThreadPool     #  线程池
    
    pool = Pool(4)       #  实例池,他的大小默认是 cpu 核心个数
    
    def func(i):
        print('..............',i)
        time.sleep(0.1)
    
    if __name__ == '__main__':
        for i in range(10):
            pool.apply_async(func=func,args=(i,))       # 向池提交任务
    
    
        # pool.map(func,range(5))               # 与 pool.apply_async
    
        pool.close()                                    # 关闭池
        pool.join()                                     # 等待任务完毕

      
      
      # pool.terminate()

     

    如果池中有返回值:

    # import multiprocessing
    # from multiprocessing import Pool  # py自带的进程池
    import time
    from multiprocessing.dummy import Pool          #  线程池
    from multiprocessing.pool import ThreadPool     #  线程池
    
    pool = Pool(4)       #  实例池,他的大小默认是 cpu 核心个数
    
    def func(i):
        print('..............',i)
        time.sleep(0.1)
        return i
    
    if __name__ == '__main__':
        a = []
        for i in range(10):
            p = pool.apply_async(func=func,args=(i,))       # 向池提交任务
            a.append(p.get())
    
        # pool.map(func,range(5))               # 与 pool.apply_async
    
        pool.close()                                    # 关闭池
        pool.join()                                     # 等待任务完毕
        for i in a:
            print(i)
    
        # pool.terminate()
    

      

  • 相关阅读:
    🍖流程控制之if判断
    🍖Python开发入门之变量
    🍖Python入门之基本数据类型
    sql事务和存储过程 【转】
    《设计模式基于C#的工程化实现及扩展》 Security Design Pattern 系列 4 角色模式(Role Pattern) 【转】
    C#中ToString格式大全 【转】
    事务日志 (SQL Server)【转】
    批处理启动、停止SQL服务 【转】
    关于HttpContext.Current.Request获取值 【转】
    C#中HashTable的用法 【转】
  • 原文地址:https://www.cnblogs.com/gdwz922/p/9339486.html
Copyright © 2011-2022 走看看