python 多进程 cpu,python利用多核cpu
这篇文章主要介绍了大蟒中的多中央处理器并行编程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
目录
多中央处理器并行编程安装使用使服从函数定义多核中央处理器并行计算
多cpu并行编程
大蟒多线程只能算并发,因为它智能使用一个中央处理器内核大蟒下过去分词包支持多中央处理器并行计算
安装
点安装过去分词
使用
#-*-编码UTF路:号8 -*-
导入数学,系统,时间
导入过去分词
定义是主要的(n):
返回n是否是素数
如果不是isinstance(n,int):
引发TypeError(“传递给is_prime的参数不属于" int "类型")
如果编号为2:
返回错误的
如果n==2:
返回真实的
max=int(math.ceil(math.sqrt(n)))
i=2
而i=max:
如果n % i==0:
返回错误的
i=1
返回真实的
def SumPrimes(n):
对于xrange(15):中的我
sum([x范围(2,n)中的如果x是质数(x),则x为x])
计算从2-n之间的所有素数之和
return sum([x for x in xrange(2,n) if IsPrime(x)])
输入=(100000,100100,100200,100300,100400,100500,100600,100700)
# start_time=time.time()
#用于输入:中的输入
#打印素数(输入)
#打印单线程执行,总耗时,time.time() -开始时间, s
# #要连接的所有并行大蟒服务器的元组
ppservers=()
#ppservers=(10.0.0.1 ,)
if len(sys.argv) 1:
ncpus=int(sys.argv[1])
#使用ncpus工作线程创建作业服务器
作业服务器=pp服务器(ncpus,ppservers=ppservers)
else:
#使用自动检测的工作线程数创建作业服务器
作业服务器=pp服务器(ppservers=ppservers)
打印过去分词可以用的工作核心线程数,job_server.get_ncpus(), workers
start_time=time.time()
jobs=[(input,job_server.submit(SumPrimes,(input,),(IsPrime,),( math ,))用于输入中的输入]#提交提交任务
对于输入,作业中的作业:
打印"下面的素数之和",输入,"是",job()# job()获取方法执行结果
打印多线程下执行耗时: ,time.time() - start_time, s
job_server.print_stats()输出执行信息
执行结果
过去分词可以用的工作核心线程数四名工人
100000以下的素数之和是454396537
100100以下的素数之和是454996777
100200以下的素数之和是455898156
100300以下的素数之和是456700218
100400以下的素数之和是457603451
100500以下的素数之和是458407033
100600以下的素数之和是459412387
100700以下的素数之和是460217613
多线程下执行耗时15岁以下。53660.86866868666
作业执行统计3360
作业计数 %所有作业作业时间总和每个作业的时间作业服务器
8 100.00 60.9828 7.622844 本地
自服务器创建以来所经过的时间15 .463686386161367
0个活动任务,4个内核
submit 函数定义
def submit(self,func,args=(),depfuncs=(),modules=(),
callback=None,callbackargs=(),group=default ,globals=None):
将函数提交到执行队列
功能要执行的功能执行的方法
带有" func "参数的参数元组方法传入的参数,使用元组
depfuncs -带有可能从" func "调用的函数的元组传入自己写的方法,元组
模块-包含要导入的模块名的元组传入模块
回拨-将使用参数调用的回调函数
列表等于callbackargs(结果,)
一旦计算完成
回调参数-回调函数的附加参数
组-作业组,在调用等待(组)等待时使用
给定组中要完成的作业
全局-字典,所有的模块、函数和类
将被导入,对于instance: globals=globals()
多核cpu并行计算
多进程实现并行计算的简单示例这里我们开两个进程,计算任务也简洁明了# 多进程
将多处理作为mp导入
定义作业(q,a,b):
打印( aaa )
Q.put(a**1000 b*1000) #将计算结果放入队列中。
#多流程
if __name__==__main__:
Q=mp。Queue() #一个队列
p1=mp。Process(target=job,args=(q,100,200))
p2=mp。Process(target=job,args=(q,100,200))
p1.start()
p1.join()
#打印(p1.ident)
p2.start()
p2.join()
Res=q.get() q.get() # Read queue,保存两次计算的结果。
打印( result: ,res)
以上个人经验,希望给你一个参考,也希望你能支持盛行的IT软件开发工作室。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。