python-18-并行计算pp模块
生活随笔
收集整理的這篇文章主要介紹了
python-18-并行计算pp模块
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目前個人計算機大都是多核的,但是在運行python程序的時候會發現實際上只有一個核心(CPU)在跑代碼,另外幾個核心都在空閑,如下圖。
1 安裝pp模塊
并行計算的目的是將所有的核心都運行起來以提高代碼的執行速度,在python中由于存在全局解釋器鎖(GIL)如果使用默認的python多線程進行并行計算可能會發現代碼的執行速度并不會加快。
一些并行模塊通過修改pyhton的GIL機制突破了這個限制,使得Python在多核電腦中也能夠有效的進行并行計算。PP(Parallel Python)模塊就是其中一種。
下載地址https://www.parallelpython.com/downloads.php
解壓縮
進入解壓目錄
python setup.py install
2 使用
(1)導入pp模塊
(2)開啟pp服務,沒有填參數表示使用全部核心進行計算
(3)設定任務,并且執行job_server.submit函數
(4)通過函數調用的方式獲取并行計算結果
例如
# (1)導入模塊 import pp import math import timedef isprime(n):# 判斷一個數是否是質數# 質數定義:只能被1或者自身整除的自然數(不包括1),稱為質數。# 判斷一個數是否是質數,只需判斷它是否能被小于它開根后的所有數整除if not isinstance(n, int):raise TypeError("argument passed to is_prime is not of 'int' type")if n < 2:return Falseif n == 2:return Truemaxvalue = int(math.ceil(math.sqrt(n)))i = 2while i <= maxvalue:if n % i == 0:return Falsei += 1return Truedef sum_primes(n):# 計算小于整數n的所有質數的和return sum([x for x in range(2, n) if isprime(x)])if __name__ == "__main__":job_server = pp.Server()print("***并行計算***")t1 = time.time()f1 = job_server.submit(sum_primes, (100000,), (isprime,), ("math",))f2 = job_server.submit(sum_primes, (100100,), (isprime,), ("math",))f3 = job_server.submit(sum_primes, (100200,), (isprime,), ("math",))f4 = job_server.submit(sum_primes, (100300,), (isprime,), ("math",))a = f1()b = f2()c = f3()d = f4()t2 = time.time()print(str(t2-t1), a, b, c, d)print("***一般計算***")t3 = time.time()a = sum_primes(100000)b = sum_primes(100100)c = sum_primes(100200)d = sum_primes(100300)t4 = time.time()print(str(t4-t3), a, b, c, d)print("***并行另一種寫法***")t5 = time.time()inputs = (100000, 100100, 100200, 100300)jobs = [(job_server.submit(sum_primes, (input,), (isprime,), ("math",))) for input in inputs]for job in jobs:print(job())t6 = time.time()print(str(t6-t5))總結
以上是生活随笔為你收集整理的python-18-并行计算pp模块的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: #高级语言 各种开发软件介绍
- 下一篇: ubuntu下执行sudo apt-ge