Seite 1 von 1

wgsiref multhreading?

Verfasst: Donnerstag 3. Mai 2007, 15:07
von Lambda
hallo,

ich möchte eine kleine webseite realisieren die besonders schnell bzw wenig resourcen verbrauchen soll. wsgiref scheint genau das richtige zu sein, allerdings muss man selbst viel mehr machen als bei einem framework. mein hauptproblem besteht nun darin wie ich jedem client der sich verbindet (also pro user) 1 thread erstelle oder mehere worker threads?

mfg

Verfasst: Freitag 4. Mai 2007, 01:05
von Lambda
hmm kann mir wirklich keiner helfen?

Verfasst: Freitag 4. Mai 2007, 07:19
von jens
wsgiref ist nur der Mittelsmann... Um das ganze sollte sich dann später fastCGI (oder was anderes) kümmern. Du hast damit erstmal nichts zu tun.
Du must nur darauf achten, das deine WSGI App threadingtauglich ist...

Verfasst: Freitag 4. Mai 2007, 12:50
von Y0Gi
wsgiref ist eine WSGI-Implementierung inklusive HTTP-Server.

Ich persönlich schreibe meine Anwendungen auf Basis von Paste (über mein sehr kleines Framework, dass eine Controller-Action-Struktur in die Sache bringt). Über PasteDeploy kann ich dann Parameter an den zu verwendenden HTTP-Server übergeben, den ich über PasteScript/`paster` starten lasse:

Code: Alles auswählen

[server:main]
use = egg:Paste#http
host = 127.0.0.1
port = 80
use_threadpool = 1
threadpool_workers = 1
Für andere Server gibt es möglicherweise ähnliche Einstellmöglichkeiten.

Verfasst: Samstag 5. Mai 2007, 02:53
von Lambda
jens hat geschrieben:wsgiref ist nur der Mittelsmann... Um das ganze sollte sich dann später fastCGI (oder was anderes) kümmern. Du hast damit erstmal nichts zu tun.
Du must nur darauf achten, das deine WSGI App threadingtauglich ist...
ich wollte wsgiref in einer anwendung gleichzeitig als server und als app nutzen, also eben ohne fastcgi, sondern als eigene gesamte anwendung. ein beispiel gibts in PEP 333:

Code: Alles auswählen

from wsgiref.simple_server import make_server, demo_app

def demo_app(environ, start_response):
    """Simplest possible application object"""
    status = '200 OK'
    response_headers = [('Content-type','text/plain')]
    start_response(status, response_headers)
    return ['Hello world!\n']

httpd = make_server('', 8000, demo_app)
print "Serving HTTP on port 8000..."

# Respond to requests until process is killed
httpd.serve_forever()

# Alternative: serve one request, then exit
##httpd.handle_request()
das problem an diesem beispiel, wie ich es nun multithreading taugliche machen kann? für meine zwecke brauche ich kein wirkliches framework, obwohl ich davon nicht abgeneigt wäre.

Verfasst: Samstag 5. Mai 2007, 10:10
von jens
Such mal im Forum nach ThreadingTCPServer ... Vielleicht hilft dir das weiter...

Verfasst: Samstag 5. Mai 2007, 10:41
von Y0Gi
Der HTTP-Server von Paste benutzt einen Threadpool und kann als Standalone verwendet werden. Ansonsten gibt es AFAIK fast alle bekannteren WSGI-Server mit Threading-Option. WSGIUtils könnte man wohl auch nehmen (ist aber ebenfalls über Paste/PasteDeploy/PasteScript nutzbar, was später den Wechsel auf einen anderen Server erleichtert).

Zu Colubrid mögen andere etwas sagen, die sich da auskennen. Da hier WSGI-Implementierung und Framework ohne sooo viel Drumherum daherkommen, mag das eine kompaktere Lösung sein.