2011-06-30 55 views
4

我在基於django的站點中使用pylucene,我想知道是否有人知道啓動jvm和attach線程的最佳位置。我不希望每次有人加載頁面時都要啓動新的jvm,但是當我在搜索時附加線程時,偶爾會在django中看到隱藏的「無法導入名稱」錯誤。在Django中使用pylucene時,執行initVM和attachCurrentThread的最佳位置是什麼

在views.py中附加線程是否是一個錯誤?

編輯:我專門尋找一種方式來實例化一個JVM,讓它運行,所以需要我就可以連接線程它。實例化jvm大約需要兩秒鐘,搜索時這是一個明顯的延遲。

回答

4

我從來沒有在Django中使用過pylucene,雖然initVM()應該在Django服務器啓動時(settings.py會是個好地方)時裝入的文件中調用。

關於attachCurrentThread:問題是你在哪裏使用lucene模塊。如果它在views.py中,那麼當然在view.py中做。儘管我認爲你不應該在每次函數調用時都這樣做。如果您使用基於類的通用Django視圖,則可以將VM環境保存在特定於對象的變量中。您是否在全球範圍的views.py中嘗試過它?

還要記住總有打電話attachCurrentThread當涉及到兩個步驟:

vm_env = lucene.getVMEnv() 
vm_env.attachCurrentThread() 

加成(見下面的註釋):

我認爲這取決於你如何在項目中導入設置。如果您只在應用中執行ìmport settings,它將不止一次加載該模塊。相反總是從django.conf import settings做。據我所知,您的原始設置文件將只在服務器啓動時加載一次

+0

在settings.py文件中,甚至似乎jvm正在每個頁面加載實例化。 Django有什麼方法只能在服務器重置時運行某些內容,而不是在每個頁面加載時運行? – Skunkwaffle

+0

我認爲這取決於你如何在你的項目中導入設置。如果您只在應用程序中執行'輸入設置',則會多次加載模塊。相反,總是從'django.conf導入設置'執行'。據我所知,您的原始設置文件將只在服務器啓動時加載一次。 –

+0

如果仍然不能解決問題,你可以考慮修改'manage.py'(development)或者你的wsgi腳本(production)。只有'initVM',它只會加載一次。 –

相關問題