allgemeine probleme bei der erstellung einer web app

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Costi
User
Beiträge: 545
Registriert: Donnerstag 17. August 2006, 14:21

vielen dank fuer die detalierte uns hilfreiche antworten

ich werd dan schon jetzt auf postgreSQL umsteigen
und danns gibs hoffentlich keine probleme mehr (-;



.
cp != mv
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

gerold hat geschrieben:Hallo!

Das geht sogar noch einfacher:

Code: Alles auswählen

try:
    conn = cherrypy.thread_data.connection
except NameError:
    conn = cherrypy.thread_data.connection = sqlite3.connect("...")

cur = conn.cursor()
...
Igittt! Das muss ich ja in jeder meiner Dateien schreiben, damit das anstandslos funktioniert. Da finde ich meine Lösung viel magischer und schicker :D
(besonders, da sie auf die "Masse" gerechnet weniger Schreibarbeit erfordert)

@Costi: Du kannst auch MySQL benutzen :D

MfG EnTeQuAk
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Hallo EnTeQuAk!
EnTeQuAk hat geschrieben:
gerold hat geschrieben:

Code: Alles auswählen

try:
    conn = cherrypy.thread_data.connection
except NameError:
    conn = cherrypy.thread_data.connection = sqlite3.connect("...")
Da finde ich meine Lösung viel magischer und schicker :D
Na ja, so schlimm finde ich das auch wieder nicht. ;-) Ich habe meist nur ein Modul von dem aus ich auf die Datenbank zugreife. Und dieses Hauptmodul wird sowiso von den meisten anderen Modulen importiert. Ich denke, damit wäre so eine Funktion (wie unten) kein so schlechter Kompromiss.

Code: Alles auswählen

import cherrypy

def get_conn():
    try:
        conn = cherrypy.thread_data.connection
    except NameError:
        conn = cherrypy.thread_data.connection = sqlite3.connect("...")
    return conn

class Root(object):

    def index(self):
        conn = get_conn()
        cur = conn.cursor()
        ...
    index.exposed = True

...
Aber deine Variante, glaube ich, wird vom CherryPy-Team vorgeschlagen. Aber irgendwie finde ich im Moment nichts darüber im CherryPy-Wiki.
EnTeQuAk hat geschrieben:@Costi: Du kannst auch MySQL benutzen :D
@Costi: Du musst aber nicht unbedingt auf EnTeQuAk hören. ;-) :P

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Costi
User
Beiträge: 545
Registriert: Donnerstag 17. August 2006, 14:21

ich find gerolds loesung vie interesanter als ``cherrypy.engine.subscribe`` zu benutzen...


trotzdem werde ich mySQL statt posgreSQL benutzen :lol: :lol:
cp != mv
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

Na ja, so schlimm finde ich das auch wieder nicht. Ich habe meist nur ein Modul von dem aus ich auf die Datenbank zugreife. Und dieses Hauptmodul wird sowiso von den meisten anderen Modulen importiert. Ich denke, damit wäre so eine Funktion (wie unten) kein so schlechter Kompromiss.
Das habe ich auch. Doch ich bin doch eher der Meinung, bereits funktionierende (und vorgeschlagene) Lösungen vorzuziehen, anstatt eine eigene zu basteln. Es sei denn, die vorhandene ist unbenutzbar oder einfach (wirklich) unschick.

Aber deine Variante, glaube ich, wird vom CherryPy-Team vorgeschlagen. Aber irgendwie finde ich im Moment nichts darüber im CherryPy-Wiki.
Im Wiki nicht, aber ich hatte mal einen Post auf der Mailingliste hier, wo Robert entsprechendes geschrieben hatte.

Costi hat geschrieben:ich find gerolds loesung vie interesanter als ``cherrypy.engine.subscribe`` zu benutzen..
Hast du dafür auch genauere Gründe, wenn man fragen darf?
Costi hat geschrieben: trotzdem werde ich mySQL statt posgreSQL benutzen
@Gerold:
Nicht traurig sein... du schaffst es noch, ein paar Benutzer zu PostgreSQL zu konvertieren :D


MfG EnTeQuAk
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

EnTeQuAk hat geschrieben:
Costi hat geschrieben: trotzdem werde ich mySQL statt posgreSQL benutzen
@Gerold:
Nicht traurig sein... du schaffst es noch, ein paar Benutzer zu PostgreSQL zu konvertieren :D


MfG EnTeQuAk
Ich bin gerade von MySQL auf postgresSQL umgestiegen :)
Und mir kommt so schnell kein MySQL mehr auf die Platte, es sei denn es ist nötig ;)
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Und wo ist der connection pool?
TUFKAB – the user formerly known as blackbird
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

blackbird hat geschrieben:Und wo ist der connection pool?
Hallo blackbird!

Diese Frage verstehe ich nicht. 10 Threads -- 10 Connections. Wenn man eine Connection an ``cherrypy.thread_data`` bindet, dann hat man einen Pool von (bei Standardeinstellung) zehn Connections offen. Ich glaube, dass ich damit nicht wirklich falsch liege. Es ist aber auch schon eine Weile her, dass ich mir ein wenig CherryPy-Quellcode angesehen habe.

Oder wie hast du die Frage gemeint?

lg
Gerold
:-)
Zuletzt geändert von gerold am Samstag 8. September 2007, 14:08, insgesamt 1-mal geändert.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

apollo13 hat geschrieben:Ich bin gerade von MySQL auf postgresSQL umgestiegen :) Und mir kommt so schnell kein MySQL mehr auf die Platte, es sei denn es ist nötig ;)
Hallo apollo13!

<Geld auf die Hand blätter...> Und hier die versprochenen 10 Euro. Und das Bier geht auf mich. :lol: :wink:

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

gerold hat geschrieben:
blackbird hat geschrieben:Und wo ist der connection pool?
Hallo blackbird!

Diese Frage verstehe ich nicht. 10 Threads -- 10 Connections. Wenn man eine Connection an ``cherrypy.thread_data`` bindet, dann hat man einen Pool von (bei Standardeinstellung) zehn Connections offen. Ich glaube, dass ich damit nicht wirklich falsch liege. Es ist aber auch schon eine Weile her, dass ich mir ein wenig CherryPy-Quellcode angesehen habe.
Dann hast du einach nur 10 Threads mit 10 Verbindungen. Also MySQL zb öffnet gestorbene Verbindungen nicht automatisch neu. Zumindest wäre mir das neu. Außerdem kannst du dir auf diese weiße nicht zwei Verbindungen in einen Thread holen oder eine Transaktion beenden lassen während der User schon seine Seite bekommen hat.
TUFKAB – the user formerly known as blackbird
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

gerold hat geschrieben:@EnTeQuAk: Aber deine Variante, glaube ich, wird vom CherryPy-Team vorgeschlagen. Aber irgendwie finde ich im Moment nichts darüber im CherryPy-Wiki.
Hallo EnTeQuAk!!

Jetzt weiß ich wieder, wo ich etwas über Connections in Threads gelesen hatte:

- http://tools.cherrypy.org/wiki/SQLObjec ... Connection
- http://tools.cherrypy.org/wiki/Databases

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Hallo blackbird!
blackbird hat geschrieben:MySQL zb öffnet gestorbene Verbindungen nicht automatisch neu.
Wenn so etwas öfter vor kommt, dann kann man ja etwas dagegen tun:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-

import psycopg2
import cherrypy

DSN = "dbname='postgres' user='irgendeiner' host='localhost' password='irgendeines'"


def get_conn():
    try:
        conn = cherrypy.thread_data.connection
        # Connection testen
        cur = conn.cursor()
        cur.execute("SELECT CURRENT_TIMESTAMP")
        cur.fetchone()
    except (NameError, psycopg2.ProgrammingError):
        conn = cherrypy.thread_data.connection = psycopg2.connect(DSN)
    
    return conn 

#...
Ich halte diesen Overhead für verschwindend gering. Deshalb hätte ich auch unter Server-Vollast kein Problem damit.
blackbird hat geschrieben:nicht zwei Verbindungen in einen Thread holen
``get_conn1()`` und ``get_conn2()``
Viel mehr, gleichzeitig offene, Verbindungen je Thread werde ich selten benötigen. Man kann es sicher andes lösen, aber sicher nicht einfacher.
blackbird hat geschrieben:eine Transaktion beenden lassen während der User schon seine Seite bekommen hat.
An so einen Fall kann ich mich jetzt nicht erinnern. -- Darüber habe ich noch nicht nachgedacht. Da müsste man wahrscheinlich irgendwie mit einer globalen Datenbankverbindung arbeiten, die dann die Jobs per Queue bekommt. So z.B.: http://aspn.activestate.com/ASPN/Cookbo ... ipe/496799

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Antworten