2010-11-16 82 views
3

我正在測試一個Google App Engine應用程序,我已經開始使用任務隊列來處理批處理作業。我有一個本地作業,似乎在任務隊列中似乎有許多任務,這似乎是在我的文件系統中創建了多個對象。要清楚:我沒有創建任何文件,應用服務器似乎正在這樣做。OSError:[Errno 24]開發環境中使用Google App Engine任務隊列打開文件太多

我已經在我的開發環境中創建大量的任務(2000+)時,在某些時候我的工作開始與下面的錯誤而失敗注意到:

<body bgcolor="#f0f0f8"><font color="#f0f0f8" size="-5"> --> 
<body bgcolor="#f0f0f8"><font color="#f0f0f8" size="-5"> --> --> 
</font> </font> </font> </script> </object> </blockquote> </pre> 
</table> </table> </table> </table> </table> </font> </font> </font><pre>Traceback (most recent call last): 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver.py", line 3211, in _HandleRequest 
    self._Dispatch(dispatcher, self.rfile, outfile, env_dict) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver.py", line 3135, in _Dispatch 
    'request.') 
    File "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/tempfile.py", line 302, in mkstemp 
    File "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/tempfile.py", line 236, in _mkstemp_inner 
OSError: [Errno 24] Too many open files: '/var/folders/rm/rm1N57BDHNCyQUT2mQRTX++++TI/-Tmp-/request.QKY1gF.tmp' 
</pre> 

我在OS X 10.6。 5,我猜這是與我的操作系統有關 - 儘管我無法完全理解爲什麼dev_appserver.py會打開如此多的文件描述符。即使每個任務創建一個,速度限制也不會阻止這個問題的發生?

我認爲這是一個問題,我只會在開發中看到,但我想問問是否有人看過它。

回答

4

大衛是對的。您不能在本地文件系統中創建文件。

但是,您得到的錯誤是由涉及dev_appserver中任務的錯誤引起的。一旦出現錯誤,請嘗試運行lsof,您會看到dev服務器有一堆數據存儲文件的句柄。

切換到使用sqlite後端此問題將消失。不要忘記,當您切換時,您將需要首次清除數據存儲區。

dev_appserver.py --use_sqlite --clear_datastore . 
0

不幸的是,在應用程序引擎上,您無法在遠程文件系統上創建任何文件(請參閱文檔的"Sandbox" section)。

如果您需要創建「文件」你也許可以在數據存儲實體使用BlobProperty(如果你的文件小於1MB),或者也許是Blobstore較大的文件(根據您的要求)。

+0

對不起,我看到我的問題是如何誤導 - 我實際上沒有創建任何文件句柄,不知何故dev_appserver.py中的任務隊列是。 – Simon 2010-11-17 05:47:57

相關問題