• 线程池


    线程池的概念:

      使用concurrent模块进行并发编程的

    先上简单的代码

    import time
    from concurrent.futures import ThreadPoolExecutor
    from threading import current_thread
    
    def func(i):
        print('thread',i,current_thread())  # 线程ID
        time.sleep(1)
        print('thread %s end'%i)
    
    tp = ThreadPoolExecutor(5) # 开了5个线程
    for i in range(20):
        tp.submit(func,i)
    tp.shutdown()
    print('主线程')

    返回值

    import time
    from concurrent.futures import ThreadPoolExecutor
    from threading import current_thread
    def func(i):
        print('thread',i,current_thread())  # 线程ID
        time.sleep(1)
        print('thread %s end'%i)
        return i*'*'
    tp = ThreadPoolExecutor(5) # 实例化线程池,开了5个线程
    ret_l = []
    for i in range(20):
        ret = tp.submit(func,i)
        ret_l.append(ret)
    for ret in ret_l:
        print(ret.result())
    print('主线程')

    回调函数

    import os
    import time
    from concurrent.futures import ProcessPoolExecutor
    from threading import current_thread as cthread
    # 线程池的回调函数 子线程完成的
    def func(i):
        print('thread',i,os.getpid())
        time.sleep(1)
        print('thread %s end'%i)
        return i*'*'
    def call_back(arg):
        print('call back:',os.getpid())
        print('ret:',arg.result())
    if __name__ == '__main__':
        tp = ProcessPoolExecutor(5)
        ret_l = []
        for i in range(20):
            tp.submit(func,i).add_done_callback(call_back)
        print('主线程',os.getpid())
    # 回调函数
    # 在线程池中 由子线程完成的
    # 在进程池中 由主线程完成的
    # 线程池
    # 实例化线程池 ThreadPoolExecutor 5*cpu_count
    # 异步提交任务 submit/map
    # 阻塞直到任务完成 shutdown
    # 获取子线程的返回值 result
    # 回调函数 add_down_callback
  • 相关阅读:
    剑指offer【面试题10 :矩形覆盖】
    剑指offer【面试题3 :二维数组中的查找】
    GStreamer Tutorials
    CMake Tutorial
    python
    python
    python-线程、进程、协程
    python-类的继承
    python-操作缓存
    python-线程池
  • 原文地址:https://www.cnblogs.com/youhongliang/p/9707972.html
Copyright © 2020-2023  润新知