zoukankan      html  css  js  c++  java
  • 进程池和线程池

    1.同步执行--------------

    from  concurrent.futures import ProcessPoolExecutor,ThreadPoolExecutor
    import os,time,random
    def task(n):
        print('[%s] is running'%os.getpid())
        time.sleep(random.randint(1,3))  #I/O密集型的,,一般用线程,用了进程耗时长
        return n**2
    if __name__ == '__main__':
        start = time.time()
        p = ProcessPoolExecutor()
        for i in range(10): #现在是开了10个任务, 那么如果是上百个任务呢,就不能无线的开进程,那么就得考虑控制
            #线程数了,那么就得考虑到池了
            obj  = p.submit(task,i).result()  #相当于apply同步方法
        p.shutdown()  #相当于close和join方法
        print('='*30)
        print(time.time() - start)  #17.36499309539795
    

    2.异步执行-----------

    from  concurrent.futures import ProcessPoolExecutor,ThreadPoolExecutor
    import os,time,random
    def task(n):
        print('[%s] is running'%os.getpid())
        time.sleep(random.randint(1,3))  #I/O密集型的,,一般用线程,用了进程耗时长
        return n**2
    if __name__ == '__main__':
        start = time.time()
        p = ProcessPoolExecutor()
        l = []
        for i in range(10): #现在是开了10个任务, 那么如果是上百个任务呢,就不能无线的开进程,那么就得考虑控制
            # 线程数了,那么就得考虑到池了
            obj  = p.submit(task,i)  #相当于apply_async()异步方法
            l.append(obj)
        p.shutdown()  #相当于close和join方法
        print('='*30)
        print([obj.result() for obj in l])
        print(time.time() - start)
    

    线程池的异步

    from  concurrent.futures import ProcessPoolExecutor,ThreadPoolExecutor
    from threading import currentThread
    import os,time,random
    def task(n):
        print('%s:%s is running'%(currentThread().getName(),os.getpid()))  #看到的pid都是一样的,因为线程是共享了一个进程
        time.sleep(random.randint(1,3))  #I/O密集型的,,一般用线程,用了进程耗时长
        return n**2
    if __name__ == '__main__':
        start = time.time()
        p = ThreadPoolExecutor() #线程池 #如果不给定值,默认cup*5
        l = []
        for i in range(10):  #10个任务 # 线程池效率高了
            obj  = p.submit(task,i)  #相当于apply_async异步方法
            l.append(obj)
        p.shutdown()  #默认有个参数wite=True (相当于close和join)
        print('='*30)
        print([obj.result() for obj in l])
        print(time.time() - start)  #3.001171827316284
    
  • 相关阅读:
    关于任意文件下载及上传漏洞
    一文掌握XSS
    WEB层知识点
    课程交流网站项目架构
    docker容器中启动uwsgi秒退
    mongoDB中update_one与find_one_update异同
    Vue集成CKEditor5源代码
    Vue的index.html与其他静态文件分离部署
    scrapy-redis分布式爬虫使用及docker swarm集群部署
    django中form组件的校验时raise ValidationError与self.add_error异同
  • 原文地址:https://www.cnblogs.com/qwksjy/p/11550278.html
Copyright © 2011-2022 走看看