
Hi! Betreffs "Modul Socket" Wenn ich von service.accept() ein Objekt zurück bekomme, und daraus ein Thread mache und dann (parallel) die nächsten Verbindungsversuch mit einen neuen Thread beantworte und immer so weiter...Ist dann eigentlich für die Threads klar welche Anfragen für sie sind und welche nicht. Also ist das Objekt was ich von service.accept() zurückbekomme schon eine Session? Oder wie sorge ich dafür das der richtige Thread mit dem richtigen Klienten redet? MfG Olaf -- =================================================== "Meine Meinung steht fest. Bitte verwirren sie mich nicht mit Tatsachen!" Unbekannt. =================================================== _______________________________________________ Python-de maillist - Python-de@python.net http://python.net/mailman/listinfo/python-de

Am Fri, Oct 17, 2003 um 17:49:21 CEST, Olaf Radicke schrieb:
Hi!
Betreffs "Modul Socket"
Wenn ich von service.accept() ein Objekt zurück bekomme, und daraus ein Thread mache und dann (parallel) die nächsten Verbindungsversuch mit einen neuen Thread beantworte und immer so weiter...Ist dann eigentlich für die Threads klar welche Anfragen für sie sind und welche nicht. Also ist das Objekt was ich von service.accept() zurückbekomme schon eine Session? Oder wie sorge ich dafür das der richtige Thread mit dem richtigen Klienten redet?
MfG Olaf
Hallo Olaf, ja das Objekt das du von accept() zurückbekommen tust ist eine Eindeutige Zuweisung einer Verbindung (oder Session, aber das behandle ich synonym)... Ich mache da einfach immer eine Klasse, welche ich von threading.Thread ableite, und welche ein Attribut "session" hat, so habe ich quasi für jede Session ein Thread Objekt, welches wiederum das dazu passende Socket Objekt dabei hat (als Attribut)... mfg Betz Stefan -- Das Telefonnetz... Unendliche Weiten... Dies sind die Abenteuer eines genervten Internet-Surfers... Weit von zu Hause entfernt stößt er in Bereiche des Systems vor, die vorher noch niemand gesehen hat... _______________________________________________ Python-de maillist - Python-de@python.net http://python.net/mailman/listinfo/python-de

Am Fre, 2003-10-17 um 21.27 schrieb Stefan J. Betz:
Am Fri, Oct 17, 2003 um 17:49:21 CEST, Olaf Radicke schrieb:
Hi!
Betreffs "Modul Socket"
Wenn ich von service.accept() ein Objekt zurück bekomme, und daraus ein Thread mache und dann (parallel) die nächsten Verbindungsversuch mit einen neuen Thread beantworte und immer so weiter...Ist dann eigentlich für die Threads klar welche Anfragen für sie sind und welche nicht. Also ist das Objekt was ich von service.accept() zurückbekomme schon eine Session? Oder wie sorge ich dafür das der richtige Thread mit dem richtigen Klienten redet?
MfG Olaf
Hallo Olaf,
ja das Objekt das du von accept() zurückbekommen tust ist eine Eindeutige Zuweisung einer Verbindung (oder Session, aber das behandle ich synonym)...
Super! Dann muss ich mich darum schon mal nicht kümmern :-) Python ist nach C/C++ so einer Erholung...
Ich mache da einfach immer eine Klasse, welche ich von threading.Thread ableite, und welche ein Attribut "session" hat, so habe ich quasi für jede Session ein Thread Objekt, welches wiederum das dazu passende Socket Objekt dabei hat (als Attribut)...
Um Vererbung habe ich aus vielerlei Gründe bisher (vielleicht auch zu Unrecht) ein Bogen gemacht. Zum einen hatte ich es lange Zeit nicht versanden, zum anderen kenne ich die Klassen der Standardbiblithek zu wenig um nicht versehentlich ein Funktionsnamen zu nehmen den es schon gibt. Um letzteres völlig aus zu schießen, benutze ich immer noch vollqulifiezierte Namen (Tkinter.Button etc.) Selbst für meine eigenen Klassen. Ich habe jetzt ein etwas größeres Projekt in Python angefangen. Eine ganze reihe von Objekten brauchen die gleichen Informationen Z.B. die die Daten aus der Konfigurationsdatei. Jetzt habe ich ein Objekt "Konfig" als global angelegt. Aber die anderen Objekte kennen es trotzdem nicht, weil ihre Klassendefinition in einer anderen Datei steht. Also gebe ich jetzt jeder Objektinstanz das Objekt "Konfig" als Parameter mit. Und weil ich noch ein paar globale Objekte mehr habe, wird die Liste immer länger. Manchmal braucht ein Objekt gar nicht das Objekt "Konfig" sondern in dem Objekt wird eine weitere Instanz eines Objektes angelegt was das globale Objekt braucht. Ich weiß Globale Variablen/Objekte sind zu vermeiden, aber bei einem Objekt "Konfig" währe es schon sinnvoll. MfG Olaf -- =================================================== "Meine Meinung steht fest. Bitte verwirren sie mich nicht mit Tatsachen!" Unbekannt. =================================================== _______________________________________________ Python-de maillist - Python-de@python.net http://python.net/mailman/listinfo/python-de

[Olaf Radicke Fri, Oct 17, 2003 at 09:28:56PM +0200]
Ich habe jetzt ein etwas größeres Projekt in Python angefangen. Eine ganze reihe von Objekten brauchen die gleichen Informationen Z.B. die die Daten aus der Konfigurationsdatei. Jetzt habe ich ein Objekt "Konfig" als global angelegt. Aber die anderen Objekte kennen es trotzdem nicht, weil ihre Klassendefinition in einer anderen Datei steht.
normalerweise kannst du ein 'config.py' (z.B.) module machen, das dann deine Parameter enthaelt. und dann kannst du das von jedem anderen Modul bekommen mit from config import some_config_var so dass du 'config' nicht ueberall herumreichen musst. Jedes Modul wird nur einmal wirklich importiert, d.h. exekutiert. Alle nachfolgenden Imports bekommen das bereits intialisierte Modul (also immer dasselbe!) sofort, ohne ein erneutes Exekutieren des Modulcodes auszulösen. Importieren ist dann im Prinzip nur eine Dictionary Operation (und zwar auf das 'sys.modules' dictionary, das Namen auf Modulobjekte abbildet).
Also gebe ich jetzt jeder Objektinstanz das Objekt "Konfig" als Parameter mit. Und weil ich noch ein paar globale Objekte mehr habe, wird die Liste immer länger. Manchmal braucht ein Objekt gar nicht das Objekt "Konfig" sondern in dem Objekt wird eine weitere Instanz eines Objektes angelegt was das globale Objekt braucht.
Ich weiß Globale Variablen/Objekte sind zu vermeiden, aber bei einem Objekt "Konfig" währe es schon sinnvoll.
im grunde vermeidest du mit dieser (in der tat aufwendigen) Strategie globable Variablen. Der oben beschriebene Mechanismus ist dagegen eine Globale-Variablen technik. Es gibt allerdings in Python keine wirklich globalen Variablen, nur Modul-Globale Variablen. gruss, holger _______________________________________________ Python-de maillist - Python-de@python.net http://python.net/mailman/listinfo/python-de

holger krekel:
Jedes Modul wird nur einmal wirklich importiert, d.h. exekutiert. Alle nachfolgenden Imports bekommen das bereits intialisierte Modul (also immer dasselbe!) sofort, ohne ein erneutes Exekutieren des Modulcodes auszulösen.
Holger, hast Du zuviel CNN geschaut? Ich dachte, Du haettest keinen Fernseher? ;-) Dinu -- Dinu C. Gherman - http://python.net/~gherman ...................................................................... "There are causes worth dying for, but none worth killing for." (Albert Camus) _______________________________________________ Python-de maillist - Python-de@python.net http://python.net/mailman/listinfo/python-de

On Fri, 17 Oct 2003 23:48:33 +0200, holger krekel wrote:
Globale-Variablen technik. Es gibt allerdings in Python keine wirklich globalen Variablen, nur Modul-Globale Variablen.
Du warst immer brav und hast noch nie mit __builtin__ rumgespielt? <ducking> Ciao, Jürgen _______________________________________________ Python-de maillist - Python-de@python.net http://python.net/mailman/listinfo/python-de

[Juergen Hermann Thu, Oct 23, 2003 at 03:08:17AM +0200]
On Fri, 17 Oct 2003 23:48:33 +0200, holger krekel wrote:
Globale-Variablen technik. Es gibt allerdings in Python keine wirklich globalen Variablen, nur Modul-Globale Variablen.
Du warst immer brav und hast noch nie mit __builtin__ rumgespielt? <ducking>
naja, einzweimalschon. Aber erst mal sollte man die Regeln lernen, bevor man sie umgeht :-) gruss, holger _______________________________________________ Python-de maillist - Python-de@python.net http://python.net/mailman/listinfo/python-de

On Fri, Oct 17, 2003 at 09:28:56PM +0200, Olaf Radicke wrote:
Z.B. die die Daten aus der Konfigurationsdatei. Jetzt habe ich ein Objekt "Konfig" als global angelegt. Aber die anderen Objekte kennen es trotzdem nicht, weil ihre Klassendefinition in einer anderen Datei steht. Also gebe ich jetzt jeder Objektinstanz das Objekt "Konfig" als Parameter mit. Und weil ich noch ein paar
Guck Dir doch mal das Borg Pattern aus dem Python Kochbuch an (In der englischen Version S. 208ff, oder auch bei ActiveState). Das kann man genau dazu verwenden: --- borg.py class Borg: _shared_state = {} def __init__(self): self.__dict__ = _shared_state --- Wenn ich Konfig-Informationen schreiben oder lesen will: import borg b=borg.Borg() b.foo = "bar" Durch den gemeinsamen _shared_state greifen alle Instanzen dieser Klasse auf die gleichen Informationen zu, d.h. was einer weiss, wissen alle. Cheerio, Jan Wender -- Jan Wender science + computing ag scVENUS Software Development Phone +49 7071 9457257 Reality is what refuses to go away when I stop believing in it.(Philip K. Dick) _______________________________________________ Python-de maillist - Python-de@python.net http://python.net/mailman/listinfo/python-de
participants (6)
-
Dinu Gherman
-
holger krekel
-
Jan Wender
-
Juergen Hermann
-
Olaf Radicke
-
Stefan J. Betz