2012-09-19 66 views
1

我想要使用NumPy對金字塔中可調用的視圖執行一些數組計算。我使用的陣列非常大(3500x3500),所以我想知道加載它的最佳位置是在哪裏重複使用。在金字塔中使用NumPy

現在我的應用程序是一個單一的頁面,我使用一個單一的視圖可調用。

該數組將從磁盤加載並不會更改。

+0

需要更多的細節。你正在運行這個多線程?你的數組是一個單線程,應該在線程之間共享並且永遠不會被修改?你是從磁盤上的文件加載還是由於其他計算而得到它? –

+0

回答您的ImportError問題:http://stackoverflow.com/questions/8710918/installing-numpy-as-a-dependency-with-setuptools –

+0

感謝您的鏈接:您原來的評論的答案在原始問題。我不知道線程,我需要閱讀。 – abroekhof

回答

3

如果數組可以在線程之間共享,那麼您可以在應用程序啓動時將其存儲在註冊表中(config.registry['my_big_array'] = ??)。如果它不能被共享,那麼我建議使用一個排隊系統,並且工作人員可以隨時加載數據,可能在另一個進程中。你可以通過使註冊表中的值成爲threadlocal,然後在變量中存儲一個新的數組(如果還沒有的話)來破解它,但是這樣你就會得到每個線程的數組副本,這對於大的東西。

+0

我對金字塔(以及一般的框架)很新,所以我試圖解析你的答案。如果線程之間共享某些東西,它只是不需要改變?如果是這樣,那麼是的:數組對於所有線程都是相同的。 – abroekhof

+1

這是在這裏工作的基本多線程主體。如果它不是隻讀的,那麼你需要一個鎖定機制來同步對數組的更改。大多數WSGI服務器每個請求使用一個線程,但有些可能使用額外的進程(數組不會共享),所以如果它不是隻讀的,您需要知道發生了什麼。 –

2

我只是將它加載到代碼中的顯而易見的地方,您需要使用它(在您看來,我猜?)並查看是否存在性能問題。與實際數字一起工作比試圖猜測會出現什麼問題更好。你通常會對現實感到驚訝。

如果看到性能問題,假設您不需要每個多線程的副本,請嘗試在導入後將其加載到全局範圍中。如果這不起作用,請嘗試將其移入自己的模塊並導入。如果這仍然沒有幫助...我不知道那是什麼。

+0

一個3500x3500的浮點數組(64位)將會大約100Mb。人們可以猜測,在視圖函數中(在每個請求上)從磁盤加載它不會超快...... – Sergey