AppEngine:将大量对象保存到数据存储区时的IOError

时间:2010-11-16 11:23:58

标签: python google-app-engine ubuntu binary-tree

干杯。我正在运行Ubuntu 10.04和最新的Google AppEngine SDK。我正在开发一个简单的网站,上面有帖子和评论。我基本上实现了一个简单的树来存储我的评论,其中包含parent_commentleftright值。

我创建了一个事件,该事件会在新的not is_saved())评论put()之前触发到Google数据存储中,该事件会计算新评论的leftright值,以及更新有效层次结构的旧注释。我基本上遵循Managing Hierarchical Data in MySQL并在Python中实现它。

一切似乎都运转良好,添加了新的评论,线程看起来不错,但是......
在启动期间提交40条注释的循环工作,但是当我将该循环增加到80或更多时,我留下了IOError:

IOError: [Errno 24] Too many open files: '/tmp/tmp0agXqU'

我生成60条评论的代码如下:

for k in range(0, 4):
    comments = {0: None}
    for i in range(1, 21):
        j = random.randrange(0, len(comments))
        pc = comments[j]

        comments[i] = Comment(
            name=lipsum(count=1),
            email=lipsum(count=1, make_slug=True) + '@email.com',
            url='http://' + lipsum(count=2, make_slug=True) + '.com',
            content=lipsum(count=random.randrange(10, 50)),
            object_link=p.key(),
            parent_comment=pc
        )
        comments[i].put()

lipsum函数只返回一段lorem ipsum文本。

关于如何解决这个问题的任何想法?谢谢!

2 个答案:

答案 0 :(得分:2)

对于一个庞大的任务队员来说,我遇到了同样的问题。

切换到本地数据存储区的SQLite可以解决问题:

dev_appserver.py --use_sqlite 
  

自App Engine SDK 1.3.3起,Python   SDK有一个新的实验功能   这提供了使用SQLite的选项   作为数据存储区存根后端。运用   dev_appserver中的SQLite应该   加快您当地的表现   数据存储在大型测试时   数据集。

对于dev_appserver文档,请查看here

答案 1 :(得分:1)

这很可能是由于bug in latest App Engine SDK。错误报告的评论提供了修复问题的补丁。