python3 并行计算_Python-并行计算
通過 ipyparallel 包進行并行計算。
具體的內容可以參考:
開啟
使用前,需要以管理員模式打開cmd,輸入
ipcluster start
開啟并行python,一般開啟的數量和cpu核心數量相同。
可能開啟速度沒那么快,直到cmd上顯示“Engines apear to have started successfully”之后,在jupyter中使用
import ipyparallel as ipp
c=ipp.Client()
c.ids
之后,才能列出所有的進程。
使用
使用時,有兩種方法。
直接使用:
并行計算map_sync:每個核將list中一個參數傳入function中,進行計算,完成后選取list中其他值再計算。list中值全部進入function中計算后,最后將結果輸出到result。functuon沒有return可省略“result = ”
result = c[:].map_sync(function,argue_list)
或者
應用計算apply_sync:各個核將同一個參數傳入function,計算結果相同。最后將結果輸出到result。functuon沒有return可省略“result = ”
result = c[:].apply_sync(function,argue)
DirectView使用:
這塊不太明白,類似進行實例化,或者選取其中部分核心進行運算。
首先創造1個view:
view = c[0:3]:使用3個核心
result = view.map_sync(function,argue_list):并行計算
result = view.apply_sync(function,argue):應用計算
關閉
將管理員模式的cmd直接關閉后,就關閉了并行核心。
一些問題
開啟了,代碼沒反應
要使用管理員模式cmd才行。正常cmd不可以。
提示ipcluster是不是有效命令
這種情況要將cmd先進入到安裝ipyparallel的文件夾下。我的目錄路徑如下:
cd c:\Program Files\Anaconda3\Scripts
進入此文件夾之后輸入
ipcluster start
才能開啟核心
管理員cmd之后,map_sync沒反應
這是遇見的一個比較奇怪的問題。
如下代碼可用:
def f(x):
return x*x
c[:].map_sync(f,[0,1,2,3,4])
但是將f函數換成自己的其他復雜函數就不能用。
測試后發現,在使用自己的復雜函數進行并行計算前,先進行一次小范圍的應用計算:
c[:].apply_sync(complex_function,argue)
之后,再進行并行計算,就可以使用了。
function函數中內外部函數問題
使用這個包的時候,每個核在每次運行時可以看做一個新的python程序,也就是說,在前邊import的包,也必須重新import。所以必須將所有包的導入代碼,以及自己寫的def函數都包含在主函數內:
def main_function(argue):
import ....
def sub_function(x):
#sub_function code
return sub_results
#main_function code
return main_results
results = c[:].map_sync(main_function,argue_list)
總結
以上是生活随笔為你收集整理的python3 并行计算_Python-并行计算的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 可爱的沙雕网名大全84个
- 下一篇: python asyncio futur