2010-09-02 5 views
0

J'ai un service simple qui fait à peu près ceci:SQLAlchemy: écriture à la base de données après la réponse a été envoyée

  1. Un client HTTP se connecte au serveur
  2. Le serveur écrit le idSession du client et l'horodatage à la base de données, et dans la plupart des cas retourne juste une réponse vide

(les cas où il le fait faire un travail réel et renvoyer des données réelles ne sont pas pertinentes à cette question)

Afin de retourner cette réponse dès que possible, je voudrais écrire l'information à memcache dans le corps du gestionnaire de requête (parce que memcache est rapide), et engendrer un thread séparé où une autre fonction utilisant SQLAlchemy écrira au stockage persistant. De cette façon, je serai capable de revenir immédiatement après avoir écrit sur memcache et généré un thread, et le gestionnaire de requêtes n'aura pas à attendre que SQLAlchemy enregistre les informations dans la base de données.

Est-ce que cela a du sens? Si oui, comment dois-je l'implémenter?

+1

avez-vous comparé les deux solutions (écrire uniquement dans memcache est pertinent pour le second)? Ma supposition est que, s'il y a même une différence mesurable, elle pâlira par rapport à la variance générale de la latence du réseau. En guise de conseil général, lisez le premier paragraphe sur cette page: http://c2.com/cgi/wiki?PrematureOptimization –

+0

Will do. Mais j'aimerais quand même pouvoir lancer un job d'arrière-plan dans un autre thread (pour les cas où le montant des calculs affectera le délai initial) et éviter les problèmes de corruption/incohérence ou d'autres problèmes habituellement associés à une mauvaise programmation parallèle compétences. – dpq

Répondre

2

Vous pouvez utiliser quelque chose comme Celery distributed task queue pour décharger le traitement vers d'autres machines. Cela nécessite la mise en place d'une infrastructure séparée, mais permettra de transférer les tâches des requêtes web en arrière-plan, tandis que la réponse HTTP à la requête peut être renvoyée immédiatement.

+0

Merci, on dirait que c'est exactement ce dont j'ai besoin – dpq

Questions connexes