Merci Kevin Samuel de ta réponse, Néanmoins, dans mon cas, je cherche plus à monter des informations en temps réel et je pensais formuler une requete pour lire mais en effet, comme le set de models sont géré principalement par l'application tornado, si mes informations récentes sont toutes en ram quand elle montent, je peux reporter l'écriture.
Je cherchais un truc plus souple qui permette de lire mais c'est vrai que cette méthode doit pouvoir faire l'affaire. Utiliser pika au lieu de celery pour accéder directement à rabbitmq me ferme la porte de changer de backend plus tard mais doit permettre à tornado d'être à la fois producer et consumer. (à l'heure actuelle mon service django fait des requettes http avec urllib2 pour notifier tornado) Merci pour ta tache de modification de modele générique. J'hésite maintenant entre 3 pistes: - celery dans tornado (pas intégré ac le réacteur mais si on utilise l'async pour de l'écriture simple c'est probablement jouable) - pika: plus de code et de recherche nécessaire mais plus souple - zmq: plus de risques de notifications droppées mais ce qu'il y a de plus souple et un peu plus simple que pika. Néanmoins, cette solution implique que je lance encore des services complémentaires, or je dépends déjà de bcps de services ^^. (tornado, celeryd, celerybeat, django, un serveur twisted pour remontées par socket de périphériques embarqués...) 2012/7/25 Kevin Samuel <[email protected]> > Je ne connais pas de moyen de rendre l'ORM Django asyncrone, mais nous > avons la même problématique que vous et nous l'avons résolu en > encaspulant systématiquement les opérations blocantes dans une task > celery. > > Par exemple, une des tâches pour écrire dans la base de donnée > ressemble à: > > [code]from django.db import models > from celery import task > > @task > def update_model(app, model, filters, ,values): > > model = models.get_model(app, model) > model.objects.filters(**filters).update(**values)[/code] > > Et dans le code que l'on veut non bloquant: > [code] > import datetime > from tasks import update_model > > # update tous les models créés avant aujourd'hui > update_model.apply_async(['ma_super_app', 'MonSuperModel', > {(created_date__lt': datetime.datetime.now()}, {'super_attribut': > 'nouvelle_valeur'}])[/code] > > Ce n'est pas super DRY, mais c'est simple et ça fait le boulot. > _______________________________________________ > django mailing list > [email protected] > http://lists.afpy.org/mailman/listinfo/django > -- Best regards, Christophe Narbonne http://blogs.dotnet-france.com/christophen/
_______________________________________________ django mailing list [email protected] http://lists.afpy.org/mailman/listinfo/django
