網站首頁 編程語言 正文
多cpu并行編程
- python多線程只能算并發,因為它智能使用一個cpu內核
- python下pp包支持多cpu并行計算
安裝
pip install pp
使用
#-*- coding: UTF-8 -*-
import math, sys, time
import pp
def IsPrime(n):
"""返回n是否是素數"""
if not isinstance(n, int):
raise TypeError("argument passed to is_prime is not of 'int' type")
if n < 2:
return False
if n == 2:
return True
max = int(math.ceil(math.sqrt(n)))
i = 2
while i <= max:
if n % i == 0:
return False
i += 1
return True
def SumPrimes(n):
for i in xrange(15):
sum([x for x in xrange(2,n) if IsPrime(x)])
"""計算從2-n之間的所有素數之和"""
return sum([x for x in xrange(2,n) if IsPrime(x)])
inputs = (100000, 100100, 100200, 100300, 100400, 100500, 100600, 100700)
# start_time = time.time()
# for input in inputs:
# print SumPrimes(input)
# print '單線程執行,總耗時', time.time() - start_time, 's'
# # tuple of all parallel python servers to connect with
ppservers = ()
#ppservers = ("10.0.0.1",)
if len(sys.argv) > 1:
ncpus = int(sys.argv[1])
# Creates jobserver with ncpus workers
job_server = pp.Server(ncpus, ppservers=ppservers)
else:
# Creates jobserver with automatically detected number of workers
job_server = pp.Server(ppservers=ppservers)
print "pp 可以用的工作核心線程數", job_server.get_ncpus(), "workers"
start_time = time.time()
jobs = [(input, job_server.submit(SumPrimes,(input,), (IsPrime,), ("math",))) for input in inputs]#submit提交任務
for input, job in jobs:
print "Sum of primes below", input, "is", job()# job()獲取方法執行結果
print "多線程下執行耗時: ", time.time() - start_time, "s"
job_server.print_stats()#輸出執行信息
執行結果
pp 可以用的工作核心線程數 4 workers
Sum of primes below 100000 is 454396537
Sum of primes below 100100 is 454996777
Sum of primes below 100200 is 455898156
Sum of primes below 100300 is 456700218
Sum of primes below 100400 is 457603451
Sum of primes below 100500 is 458407033
Sum of primes below 100600 is 459412387
Sum of primes below 100700 is 460217613
多線程下執行耗時: ?15.4971420765 s
Job execution statistics:
?job count | % of all jobs | job time sum | time per job | job server
? ? ? ? ?8 | ? ? ? ?100.00 | ? ? ?60.9828 | ? ? 7.622844 | local
Time elapsed since server creation 15.4972219467
0 active tasks, 4 cores
submit 函數定義
def submit(self, func, args=(), depfuncs=(), modules=(),
callback=None, callbackargs=(), group='default', globals=None):
"""Submits function to the execution queue
func - function to be executed 執行的方法
args - tuple with arguments of the 'func' 方法傳入的參數,使用元組
depfuncs - tuple with functions which might be called from 'func' 傳入自己寫的方法 ,元組
modules - tuple with module names to import 傳入 模塊
callback - callback function which will be called with argument
list equal to callbackargs+(result,)
as soon as calculation is done
callbackargs - additional arguments for callback function
group - job group, is used when wait(group) is called to wait for
jobs in a given group to finish
globals - dictionary from which all modules, functions and classes
will be imported, for instance: globals=globals()
"""
多核cpu并行計算
- 多進程實現并行計算的簡單示例
- 這里我們開兩個進程,計算任務也簡潔明了
# 多進程
import multiprocessing as mp
def job(q, a, b):
print('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()
# print(p1.ident)
p2.start()
p2.join()
res = q.get() + q.get() # 讀取隊列,這里面保存了兩次計算得到的結果
print('result:', res)
原文鏈接:https://liuhuiyao.blog.csdn.net/article/details/72853750
相關推薦
- 2022-02-11 ES6的Promise用法詳解_基礎知識
- 2022-04-05 vxe-table(vxe-grid)自定義模塊:列頭
- 2022-12-05 numpy中的log和ln函數解讀_python
- 2023-01-14 GoLang內存模型詳細講解_Golang
- 2022-07-15 C#中Timer定時器類的簡單使用_C#教程
- 2022-08-22 Python中可以用三種方法判斷文件是否存在_python
- 2022-03-11 .NET6中使用CuteEditor詳解_實用技巧
- 2022-05-17 IDEA使用Tomcat
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支