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. 马尔克斯
  • 相关阅读:
    标题
    Ubuntu配置 PPTP 服务器端
    网络虚拟化问题小记
    DevStack部署Openstack环境
    Ubuntu LVM扩展LV
    Gnocchi+Aodh服务简析
    部署Ceilometer +Gnocchi + Aodh
    Runing MAC on KVM 问题小记
    处理 Ceilometer UPD 丢包
    TC limit bandwidth
  • 原文地址:https://www.cnblogs.com/jzsg/p/11024439.html
Copyright © 2011-2022 走看看