进程池

Posted dymlnet

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了进程池相关的知识,希望对你有一定的参考价值。

一个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)

技术分享图片

 

以上是关于进程池的主要内容,如果未能解决你的问题,请参考以下文章

多线程编程

在 Python 多处理进程中运行较慢的 OpenCV 代码片段

python进程进程池代码部分

线程池

IIS6 程序池错误< 'DefaultAppPool' 提供服务的进程意外终止>

java 简单的代码片段,展示如何将javaagent附加到运行JVM进程