python-18-并行计算pp模块
目前個(gè)人計(jì)算機(jī)大都是多核的,但是在運(yùn)行python程序的時(shí)候會(huì)發(fā)現(xiàn)實(shí)際上只有一個(gè)核心(CPU)在跑代碼,另外幾個(gè)核心都在空閑,如下圖。
1 安裝pp模塊
并行計(jì)算的目的是將所有的核心都運(yùn)行起來以提高代碼的執(zhí)行速度,在python中由于存在全局解釋器鎖(GIL)如果使用默認(rèn)的python多線程進(jìn)行并行計(jì)算可能會(huì)發(fā)現(xiàn)代碼的執(zhí)行速度并不會(huì)加快。
一些并行模塊通過修改pyhton的GIL機(jī)制突破了這個(gè)限制,使得Python在多核電腦中也能夠有效的進(jìn)行并行計(jì)算。PP(Parallel Python)模塊就是其中一種。
下載地址https://www.parallelpython.com/downloads.php
解壓縮
進(jìn)入解壓目錄
python setup.py install
2 使用
(1)導(dǎo)入pp模塊
(2)開啟pp服務(wù),沒有填參數(shù)表示使用全部核心進(jìn)行計(jì)算
(3)設(shè)定任務(wù),并且執(zhí)行job_server.submit函數(shù)
(4)通過函數(shù)調(diào)用的方式獲取并行計(jì)算結(jié)果
例如
# (1)導(dǎo)入模塊 import pp import math import timedef isprime(n):# 判斷一個(gè)數(shù)是否是質(zhì)數(shù)# 質(zhì)數(shù)定義:只能被1或者自身整除的自然數(shù)(不包括1),稱為質(zhì)數(shù)。# 判斷一個(gè)數(shù)是否是質(zhì)數(shù),只需判斷它是否能被小于它開根后的所有數(shù)整除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):# 計(jì)算小于整數(shù)n的所有質(zhì)數(shù)的和return sum([x for x in range(2, n) if isprime(x)])if __name__ == "__main__":job_server = pp.Server()print("***并行計(jì)算***")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("***一般計(jì)算***")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))總結(jié)
以上是生活随笔為你收集整理的python-18-并行计算pp模块的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: #高级语言 各种开发软件介绍
- 下一篇: 六级(2021/6-1) Text2