zoukankan      html  css  js  c++  java
  • 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]
  • 相关阅读:
    关于Token
    利用Chrome模拟访问移动端网页
    文件上传
    final修饰符
    后台返回字符串类型function的处理 (递归算法)
    javascript typeof
    单点登录的原理与简单实现
    response.setHeader()的用法
    UML类图6种关系的总结
    子类父类属性的覆盖(继承)
  • 原文地址:https://www.cnblogs.com/kakawith/p/8419016.html
Copyright © 2011-2022 走看看