zoukankan      html  css  js  c++  java
  • 【Python】python3.x 线程池 初探

    #!/usr/bin/env python
    # -*- encoding: utf-8 -*-
    '''
    @File    :   thread_test.py
    @Time    :   2019/06/14 16:13:56
    @Author  :   Ni Dazhong 
    @Version :   1.0
    @Desc    :   use python3.x
    '''
    
    from concurrent.futures import ProcessPoolExecutor, ThreadPoolExecutor, wait
    import os, time, random, logging
    
    
    logging.basicConfig(
        level    = logging.DEBUG,
        format   = '%(asctime)s %(levelname)s %(process)d --- [%(threadName)s] %(filename)s %(funcName)s %(lineno)d : %(message)s',
        datefmt  = '%Y-%m-%d %H:%M:%S',
    )
    
    def run_task(identifier, sleep_time):
        logging.info("task %s running ..."%(identifier))
        time.sleep(sleep_time) # 模拟方法执行时间
        return sleep_time
    
    
    
    if __name__ == "__main__":
        start_time = time.time()
        executor = ThreadPoolExecutor(max_workers=3)
    
        tasks = []
    
        for i in range(5):
            random_sleep = random.randint(1,5)
            task = executor.submit(run_task, i, random_sleep)
    
    
            task_info = {}
            task_info["identifier"] = i
            task_info["random_sleep"] = random_sleep
            task_info["task"] = task
    
            tasks.append(task_info)
            
        print(wait([t["task"] for t in tasks], 4)) # wait方法等待4 秒查看线程运行状态
    
        for t in tasks:
            print("task{} random_sleep {}s, isDone: {} ".format(t["identifier"], t["random_sleep"], t["task"].done()))
    
    
    
    

    运行结果

    $ python thread_test.py
    2019-06-14 17:19:13 INFO 52688 --- [ThreadPoolExecutor-0_0] thread_test.py run_task 22 : task 0 running ...
    2019-06-14 17:19:13 INFO 52688 --- [ThreadPoolExecutor-0_1] thread_test.py run_task 22 : task 1 running ...
    2019-06-14 17:19:13 INFO 52688 --- [ThreadPoolExecutor-0_2] thread_test.py run_task 22 : task 2 running ...
    2019-06-14 17:19:14 INFO 52688 --- [ThreadPoolExecutor-0_0] thread_test.py run_task 22 : task 3 running ...
    2019-06-14 17:19:16 INFO 52688 --- [ThreadPoolExecutor-0_2] thread_test.py run_task 22 : task 4 running ...
    DoneAndNotDoneFutures(done={<Future at 0x30d8b10 state=finished returned int>, <Future at 0x30e76b0 state=finished returned
    int>}, not_done={<Future at 0x30e7b10 state=running>, <Future at 0x30e7550 state=running>, <Future at 0x30e7b50 state=running>})
    task0 random_sleep 1s, isDone: True
    task1 random_sleep 5s, isDone: False
    task2 random_sleep 3s, isDone: True
    task3 random_sleep 4s, isDone: False
    task4 random_sleep 4s, isDone: False
    

    结果分析
    代码中指定线程池只有3个可用线程, 可见打印日志也只有ThreadPoolExecutor-0_0/1/2 三个线程, 其中主线程wait 了4买哦

    “年轻时,我没受过多少系统教育,但什么书都读。读得最多的是诗,包括烂诗,我坚信烂诗早晚会让我邂逅好诗。” by. 马尔克斯
  • 相关阅读:
    经典基础算法之面试题(系列一)
    Shell脚本中的二维字符串列表
    网络字节流数据解析组件的设计与实现Circular Buffer(Ring Buffer)
    Django开发环境搭建(Windows+Python2.6)
    C++中堆(优先队列)的应用:make_heap, pop_heap, push_heap, sort_heap, priority_queue
    求逆序数的快速算法归并排序
    经典基础算法之BST详解(系列二)
    PHP数组去重
    微信小程序分享设置
    微信小程序判断开发环境
  • 原文地址:https://www.cnblogs.com/jzsg/p/11024439.html
Copyright © 2011-2022 走看看