AppEngine:将大量对象保存到数据时出错

2024-05-15 04:34:10 发布

您现在位置:Python中文网/ 问答频道 /正文

为大家干杯。我正在运行ubuntu10.04和最新的googleappenginesdk。我在一个简单的网站上工作,有帖子和评论的帖子。我基本上实现了一个简单的树来存储带有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文本。你知道吗

有什么办法解决这个问题吗?谢谢!你知道吗


Tags: inrightforputcountcomment评论range
2条回答

对于一个庞大的taskqueue工作人员,我也遇到了同样的问题。你知道吗

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

dev_appserver.py  use_sqlite 

Since App Engine SDK 1.3.3, the Python SDK has a new experimental feature that gives the option to use SQLite as the datastore stub backend. Using SQLite within the dev_appserver should speed up performance of your local datastore when testing on large datasets.

有关dev_appserver文档,请查看here

这很可能是由于bug in latest App Engine SDK。错误报告的注释提供了一个修补程序来修复该问题。你知道吗

相关问题 更多 >

    热门问题