• python vs java Threadpool


    python 实现threadpool线程池管理:

    from concurrent.futures import ThreadPoolExecutor as te
    from concurrent.futures import ProcessPoolExecutor as pe
    from concurrent.futures import wait
    from concurrent.futures import FIRST_COMPLETED, ALL_COMPLETED, as_completed
    import time
    import os
    import logging
    
    logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s -
     %(message)s')
    
    Executor_Service = te(max_workers=5)  # create a pool contains five workers  executor service
    Executors_Service_P = pe(max_workers=os.cpu_count())  # create a pool contains max cpu count Process executor service
    
    
    def test_fan(*k):
        """use *k 解包参数"""
        # logging.info(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + " ->get result is:" + str(k)+"pid is %s"%os.getpid())
        time.sleep(sum(k) / 10)
    
        return k
    
    
    if __name__ == '__main__':
        print("cur computer max cpu number is %s" % os.cpu_count())
        futures = []
        for i in range(10):
            list_test = [i, i + 1, i + 2]
            future = Executor_Service.submit(test_fan, *list_test)
            futures.append(future)
        Executor_Service.shutdown()  # shutdown  pool
        results = []
        for f in futures:
            if f.done():  # bool type
                results.append(f.result())
        print(f"get result of all : {results}")
        # part2 演示ALL_COMPLETED
        wait(futures, timeout=10, return_when=ALL_COMPLETED)
        # 问题:上面虽然提供了判断任务是否结束的方法,但是不能在主线程中一直判断啊
        # TODO如何实现一有任务结束就立马返回结果呢:借助as_completed
        for f in as_completed(futures, timeout=10):
            print(f.result())
    

      java 实现线程池管理:

    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    
    public class MyExecuter implements  Runnable{
    
        private  int i=0;
        @Override
        public  void run(){
            while (i<10) {
    
                SimpleDateFormat strf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
                String d = strf.format(new Date());// new Date()为获取当前系统时间
                System.out.println(d+"  "+Thread.currentThread().getName());
                i++;
            }
        }
    
        public static void main(String[] args) {
            ExecutorService  pool   = Executors.newFixedThreadPool(5);
            for (int i = 0; i <10; i++) {
                pool.submit(new MyExecuter());
            }
    
            pool.shutdown();  //shutdown all task  wait all task finish ,not longer recv  new task ,shutdownNow 立即关闭线程池
        }
    }
    

      

  • 相关阅读:
    usb 安装系统
    跨站请求伪造攻击的基本原理与防范
    解决hexo神烦的DTraceProviderBindings MODULE_NOT_FOUND
    我知道
    MAC 重置MySQL root 密码
    线性变换与独立观察的期望和方差
    最小二乘法
    卡方检验中自由度的计算
    关于置信水平,求区间的简便算法
    独立观察与线性变换方差 均值计算
  • 原文地址:https://www.cnblogs.com/SunshineKimi/p/12305137.html
Copyright © 2020-2023  润新知