Python_多进程_创建进程池

多进程_创建进程池

一、进程池概括

1、进程池说明

2、进程池方法

二、获取cpu操作核数

import multiprocessing
multiprocessing.cpu_count()

运行结果

三、多进程_进程池&单进程的效率比对

#coding: utf-8
import multiprocessing
import time 
def m1(x):
    time.sleep(0.05)
    return x * x

if __name__ == '__main__':
    #多进程_进程池的执行时间
    pool = multiprocessing.Pool(multiprocessing.cpu_count())#pool进程池,()获取cpu的核数
    i_list = range(1000)
    time1=time.time()
    pool.map(m1, i_list)#
    time2=time.time()
    print('time elapse:',time2-time1)

    #单进程的执行时间
    time1=time.time()
    list(map(m1, i_list))
    time2=time.time()
    print('time elapse:',time2-time1)

运行结果

四、创建进程池

#encoding=utf-8
from multiprocessing import Pool

def f(x):
return x * x

if __name__ == '__main__':
pool = Pool(processes = 4) # start 4 worker processes
result = pool.apply_async(f,[10]) # evaluate "f(10)" asynchronously
print(result)
print(result.get(timeout = 1))
print(pool.map(f,range(10))) # prints "[0, 1, 4,..., 81]"

 运行结果

延伸:(实现给map中的函数传递多个参数)

#encoding=utf-8
from multiprocessing import Pool

def f(object):
    return object.x * object.y

class A:
    def __init__(self,a,b):
        self.x =a
        self.y =b

if __name__ == '__main__':
    pool = Pool(processes = 4)      # start 4 worker processes
    params = [A(i,i) for i in range(10)]
print(pool.map(f,params))   # prints "[0, 1, 4,..., 81]"

运行结果:

五、多进程与单进程执行时间的比较

#encoding=utf-8
import time
from multiprocessing import Pool
def run(fn):
#fn: 函数参数是数据列表的一个元素
time.sleep(1)
return fn * fn

if __name__ == "__main__":
testFL = [1,2,3,4,5,6]
print ('Single process execution sequence:') #顺序执行(也就是串行执行,单进程)
s = time.time()
for fn in testFL:
run(fn)
e1 = time.time()
print(u"顺序执行时间:",int(e1-s))

print('concurrent:') #创建多个进程,并行执行
pool = Pool(5) #创建拥有5个进程数量的进程池
#testFL:要处理的数据列表,run:处理testFL列表中数据的函数
rl = pool.map(run,testFL)
pool.close()#关闭进程池,不再接受新的任务,join之前必须加上close(),否则会报错
pool.join()#主进程阻塞等待子进程的退出
e2 = time.time()
print(u"并行执行时间:",int(e2 - e1))
print(rl)

运行结果

 

转载于:https://www.cnblogs.com/rychh/articles/11332248.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值