我正在测试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会打开这么多文件描述符。即使每个任务创建一个,速率限制也不会阻止这个问题发生吗?
我认为这是一个我只会在开发中看到的问题,但我想问一下是否有其他人看过它。
答案 0 :(得分:4)
但是你得到的错误是由一个涉及dev_appserver中的任务的错误引起的。一旦出现错误,请尝试运行lsof
,您将看到开发服务器有一堆数据存储文件的句柄。
切换到使用sqlite后端这个问题就会消失。不要忘记,当您切换时,您需要第一次清除数据存储区。
dev_appserver.py --use_sqlite --clear_datastore .
答案 1 :(得分:0)
不幸的是,在app引擎上,您无法在远程文件系统上创建任何文件(请参阅文档的"Sandbox" section)。
如果您需要创建“文件”,您可以在数据存储区实体上使用BlobProperty
(如果文件小于1MB),或者对于较大的文件可能使用Blobstore(取决于你的要求)。