簡體   English   中英

在 Python 3 中並行化“for”循環

[英]parallelize 'for' loop in Python 3

我正在嘗試對 MODIS 衛星數據進行一些分析。 我的代碼主要讀取尺寸為 1200 x 1200 (806*1200*1200) 的大量文件 (806)。 它使用for loop並執行數學運算。

以下是我讀取文件的一般方式。

mindex=np.zeros((1200,1200))
for i in range(1200):
    var1 = xray.open_dataset('filename.nc')['variable'][:,i,:].data
    for j in range(1200):
        var2 = var1[:,j]
        ## Mathematical Calculations to find var3[i,j]## 
        mindex[i,j] = var3[i,j]

由於要處理大量數據,該過程非常緩慢,我正在考慮對其進行並行化。 我嘗試用joblib做一些事情,但我沒能做到。

我不確定如何解決這個問題。

我的猜測是您想同時處理多個文件。 為此,最好的方法(在我看來)是使用multiprocessing 要使用它,您需要定義一個基本步驟,它已經在您的代碼中完成。

import numpy as np
import multiprocessing as mp
import os

def f(file):
    mindex=np.zeros((1200,1200))
    for i in range(1200):
        var1 = xray.open_dataset(file)['variable'][:,i,:].data
        for j in range(1200):
            var2 = var1[:,j]
            ## Mathematical Calculations to find var3[i,j]## 
            mindex[i,j] = var3[i,j]
    return (file, mindex)


if __name__ == '__main__':
    N= mp.cpu_count()

    files = os.scandir(folder)

    with mp.Pool(processes = N) as p:
        results = p.map(f, [file.name for file in files])

這應該返回一個元素results列表,其中每個元素都是一個帶有文件名和 mindex 矩陣的元組。 有了這個,您可以同時處理多個文件。 如果每個文件的計算時間很長,則特別有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM