2010-11-16 21 views
2

Salut à tous. Je cours Ubuntu 10.04 et le dernier SDK de Google AppEngine. Je travaille sur un site web simple qui a des messages et des commentaires aux articles. J'ai fondamentalement mis en place un arbre simple pour stocker mes commentaires avec des valeurs parent_comment, left et right.AppEngine: IOError lors de l'enregistrement d'un grand nombre d'objets dans le magasin de données

I a créé un événement qui se déclenche avant une nouvelle (not is_saved()) commentaire est put() dans le Google Datastore, qui calcule les left et right valeurs pour le nouveau commentaire, ainsi que des mises à jour pour les commentaires plus anciens d'une hiérarchie valide. J'ai fondamentalement suivi Managing Hierarchical Data in MySQL et l'ai implémenté en Python.

Un cycle qui soumet 40 commentaires pendant le démarrage fonctionne, mais quand j'augmente ce cycle à 80 ou plus, il me reste avec un IOError:

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

Mon code pour générer 60 commentaires ressemble à ceci:

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() 

La fonction lipsum retourne simplement un morceau de texte lorem ipsum.

Des idées pour résoudre ce problème? Merci!

Répondre

2

J'ai eu le même problème pour un travailleur de queue de tâche massive.

Passage à SQLite pour votre magasin de données locale pourrait résoudre le problème:

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.

Pour la documentation dev_appserver, consultez here