日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python-18-并行计算pp模块

發布時間:2023/12/8 python 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 # (2)開啟服務 job_server = pp.Server() # 默認使用全部核心數 # job_server = pp.Server(ncpus=4) # 可以自己指定核心數 # (3)提交任務 f1 = job_server.submit(func1, args1 , depfuncs1, modules1) # func1: 被并行執行的函數 # args1: func的參數,以元組的形式傳入 # depfuncs1: 被func調用的函數,以元組的形式傳入 # modules1: 函數執行需要調用的模塊,以元組的形式傳入 # (4)獲取結果 result1 = f1()

例如

# (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模块的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。