• python:进程池


    1,进程可以无限开吗?

    进程不可以无限开,cpu有十六核,代表可以同时处理16个任务,如果有160个进程,每个进程

    处理需要0.01s,16核的处理器处理160个进程就需要0.5s,因为进程越多需要的时间越多。

    2,进程池

    import os
    import time
    import random
    from multiprocessing import Pool
    from multiprocessing import Process
    def func(i):
        i += 1
    if __name__ == '__main__':
        p = Pool(5)          # 创建了5个进程。一般来说,这里的数值是核数#+1,如果不知道cpu的核数是多少,可以调用os.cpu_count()查看
        start = time.time()
        p.map(func,range(1000))   # target = func  args=next(iterable)  # [(1,2,3),1,2,3,4]
        p.close()   # 是不允许再向进程池中添加任务
        p.join()
        print(time.time() - start)
        start = time.time()
        l = []
        for i in range(1000):
            p = Process(target=func,args=(i,))  # 创建了一百个进程
            p.start()
            l.append(p)
        [i.join() for i in l]
        print(time.time() - start)

    3,

    import time
    from multiprocessing import Pool
    # apply
    
    def func(i):
        time.sleep(1)
        i += 1
        # print(i)
        return i+1
    
    if __name__ == '__main__':
        p = Pool(5)
        res_l = []
        for i in range(20):
            # p.apply(func,args=(i,))   # apply是同步提交任务的机制
            res = p.apply_async(func,args=(i,))  # apply_async是异步提交任务的机制
            res_l.append(res)
            # print(res.get())   # 阻塞 :等待着任务结果
        p.close() # close必须加在join,不允许再添加新的任务了
        p.join()  # 等待子进程结束再往下执行
        [print(i.get()) for i in res_l]
  • 相关阅读:
    洛谷P1455 搭配购买(并查集)
    洛谷 P2078 朋友(并查集)
    TheZealous的集训日常之 离线算法与在线算法区别
    综合练习: Python自动化测试--从Excel读取数据并录入mysql
    读取excel/CSV/json数据
    Python 日志
    python 操作数据库
    python requests 接口: 调用百度开发者平台图片文字识别接口
    接口测试理论 2
    接口测试理论 1
  • 原文地址:https://www.cnblogs.com/kakawith/p/8419016.html
Copyright © 2020-2023  润新知