进程池

时间:2019-09-19
本文章向大家介绍进程池,主要包括进程池使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

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)

原文地址:https://www.cnblogs.com/qwksjy/p/11550278.html