wgsiref multhreading?

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Lambda
User
Beiträge: 25
Registriert: Freitag 27. April 2007, 17:11

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
Lambda
User
Beiträge: 25
Registriert: Freitag 27. April 2007, 17:11

hmm kann mir wirklich keiner helfen?
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

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.
Lambda
User
Beiträge: 25
Registriert: Freitag 27. April 2007, 17:11

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.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Such mal im Forum nach ThreadingTCPServer ... Vielleicht hilft dir das weiter...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

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.
Antworten