zoukankan      html  css  js  c++  java
  • python3 进程池的同步调用

    # coding:utf-8
    import os
    import time
    from multiprocessing import Pool
    
    
    def func(n):
        print("%s:%s" % (os.getpid(), n))
        return n**2
    
    def func2(n):
        print("%s:%s" % (os.getpid(), n))
        time.sleep(1)
        return n**2
    
    
    if __name__ == '__main__':
        start_time = time.time()
        pool = Pool(5)  # 进程池中从无到有创建5个进程,以后一直是这5个进程在执行任务
        res_lst = []
        for i in range(10):
            res = pool.apply(func, args=(i,))  # 同步调用,直到本次任务执行完毕拿到res,等待任务func执行的过程中可能有阻塞也可能没有阻塞
                                        # 但不管该任务是否存在阻塞,同步调用都会在原地等着
            res_lst.append(res)
        print(res_lst)
        print("无阻塞进程池的执行时间:", time.time() - start_time)
    
        s_time = time.time()
        pool2 = Pool(5)  # 进程池中从无到有创建5个进程,以后一直是这5个进程在执行任务
        res_lst2 = []
        for i in range(10):
            res = pool2.apply(func2, args=(i,))  # 同步调用,直到本次任务执行完毕拿到res,等待任务func2执行的过程中可能有阻塞也可能没有阻塞
                                        # 但不管该任务是否存在阻塞,同步调用都会在原地等着
            res_lst2.append(res)
        print(res_lst2)
        print("有阻塞进程池的执行时间:", time.time() - s_time)
    
    # 9156:0
    # 9156:1
    # 9156:2
    # 9156:3
    # 9156:4
    # 9156:5
    # 9156:6
    # 9156:7
    # 9156:8
    # 9156:9
    # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
    # 无阻塞进程池的执行时间: 0.515625
    # 5816:0
    # 3324:1
    # 3312:2
    # 8228:3
    # 9976:4
    # 5816:5
    # 3324:6
    # 3312:7
    # 8228:8
    # 9976:9
    # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
    # 有阻塞进程池的执行时间: 10.421875
  • 相关阅读:
    设计模式(一)基础面向对象
    面试题之三门问题
    「巫师3(The Witcher 3:Wild Hunt)」游戏测评
    欧拉角和四元数
    struts标签遍历各种list Map
    浅谈HtmlCleaner+XPath解析html或者xml
    hadoop简单例子
    解决JSP参数传递乱码的问题
    Set、List、Map的区别(浅谈)
    做个犀利的码农
  • 原文地址:https://www.cnblogs.com/lilyxiaoyy/p/10986600.html
Copyright © 2011-2022 走看看