Seite 1 von 1

Kommunikation unter Threads

Verfasst: Sonntag 14. November 2004, 17:27
von informatics
Hallo,
Ich suche eine Möglichkeit einfach Nachrichten unter Threads auszutauschen. Bin hierbei auf das candygram.sourceforge.net Project gestossen, welches sich sehr viel versprechend an hört. Nur habe ich im FAQ der Seite gelesen, dass es unter manchen Betriebssystem zu Begrenzungen bei der Anzahl von Threads kommen kann. Ich müsste aber unter Umständen sehr sehr viele Threads gleichzeitig laufen lassen. Habt ihr damit schon Erfahrungen gemacht? Wie viel Threads kann man in der Regel öffnen? Dachte bisher, dass ein paar 1000 problemlos möglich wären. Welche Techniken verwendet ihr zur Kommunikation unter Threads?

Viele Grüße

Informatics

Verfasst: Sonntag 14. November 2004, 19:26
von rayo
Hi

Für was brauchst du über 1000 Threads?

Ich hab bisher nur wenige Threads gebraucht und sonst hab ich meistens mit Queues die Kommunikation gemacht.

Gruss

Verfasst: Sonntag 14. November 2004, 20:06
von mitsuhiko
Ich hab noch nie mit mehr als 2 Threats gearbeitet.
Eine für die Programmoberfläche, den 2. für die Aufgabe des Programms.
Für was bitte 1000??? :shock:

Verfasst: Sonntag 14. November 2004, 20:24
von informatics
Hallo,
Gut 1000 Threads sind vielleicht etwas übertrieben ;-) Vermutlich brauche ich nicht soviele. Ich war nur etwas verwundert darüber, das die Anzahl an Threads so beschrenkt zu sein scheint.. vielleicht braucht man ja doch mal mehr? Nachrichten schicken kann ich also mit Queues? Werd es mir mal ansehen. Habt ihr vielleicht ein gutes Beispiel zur Hand?

Viele Grüße

Informatics

Verfasst: Sonntag 14. November 2004, 20:40
von rayo
Hi

Also bei meinem System hat Apache die meistens Threads mit 250 aber die meisten sind inaktiv. Ich glaube ich hab mal was gelesen, dass nicht mehr als 20 gleichzeitig aktive Threads laufen sollten.

Die Queues sind ganz einfach:

Code: Alles auswählen

from threading import Thread
from Queue import Queue
class Thread1(Thread):
    def __init__(self,reciever,sender):
        self.reciever= reciever
        self.sender = sender
        
        super(Thread1, self).__init__()
        
    def run(self):
        while 1:
            item = self.reciever.get()
            print item
            self.sender.put(item+".")
q1 = Queue()
q2 = Queue()

t1 = Thread1(q1,q2)
t2 = Thread1(q2,q1)

q1.put('hallo')
Sobald q1.put('hallo') ausgeführt wird, schicken sich die beiden Threads die Meldung hin und her, beim get() wartet der Thread bis ein Element vorhanden ist, nur merkst du dass hier nicht, weil sie sich sofort wieder eine Meldung schicken.

Gruss

*edit* ups die beiden Threads müssen natürlich noch mit start() aktiviert werden.

Verfasst: Sonntag 14. November 2004, 21:36
von informatics
Hallo,
Werd es gleich ausprobieren.Danke :-)

Viele Grüße

Inforamtics