码迷,mamicode.com
首页 > 系统相关 > 详细

进程池

时间:2018-02-05 19:57:44      阅读:226      评论:0      收藏:0      [点我收藏+]

标签:处理   图片   添加   决定   操作   技术分享   高效   需要   rom   

一个cpu在运作的时候采用切片法,因此一个cpu在微观角度只能处理一个进程,现在的处理器大多是4核,可以同时处理4个任务,

在开启进程的时候操作系统需要给这个进程分配空间,地址等配指,这是很耗费时间的,所以在操作系统中,有数据池得概念,数据池中有几个进程由cpu决定

比如如果有4核那就有4个进程,当这4个进程有一个结束时就由外面等候的新进程替换,新进程不会重新开通空间而是沿用数据池已有的进程配置来达到节省时间提高效率的目的

import time
from multiprocessing import Pool
def func(i):
    i += 1

if __name__ == __main__:
    p = Pool(5)          # 创建了5个进程
    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()

技术分享图片

使用数据池后他生成执行100个线程只用了0.2s

如果不使用数据池的话

import time
from multiprocessing import Pool
from multiprocessing import Process
def func(i):
    i += 1

if __name__ == __main__:
    # p = Pool(5)          # 创建了5个进程
    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)

技术分享图片

 

进程池

标签:处理   图片   添加   决定   操作   技术分享   高效   需要   rom   

原文地址:https://www.cnblogs.com/dymlnet/p/8419011.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!