Guten Abend!
Ich habe ein Programm geschrieben, welches unter Umständen mehr Threads braucht, als mein Versuchsnetbook zur Verfügung stellt (~380).
Nach dem zu schließen, was ich im Inet gefunden habe, scheint der sogenannte StackSize das erstellen von weiteren Threads zu verhindern.
Deshalb will ich Gebrauch von dem resource Modul machen.
http://docs.python.org/library/resource.html
Meines Wissens nach reicht es, wenn man durch die Funktion resource.setrlimit(resource.RLIMIT_STACK, (-1,-1)) den StackSize auf das maximal Mögliche stellt.
Leider kann ich trotzdem nicht mehr threads öffnen :K
python resource
Was ist denn das für ein Programm? So viele Threads, kann man das nicht irgendwie anders machen?
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Muss denn wirklich für jeden Client ein permanent laufender Thread gestartet sein? Ich stelle mir grad mal vor, das würden Webserver machen, die pro Minute Millionen Zugriffe haben...Bob13 hat geschrieben:mir fällt nichts ein.
Es ist übrigens ein Chatserver, der für jeden Clienten einen neuen Thread startet.
Eine andere Lösung als über Threads würde mir da nicht einfallen...
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Naja, bei webservern wird ja die verbindung nach "kurzer" zeit wieder beendet.
Bei einem chat server muss ja logischerweise die verbindung bestehen bleiben. Eine andere Lösung anstatt der mit Threads fällt mir btw auch nicht ein...
Bei einem chat server muss ja logischerweise die verbindung bestehen bleiben. Eine andere Lösung anstatt der mit Threads fällt mir btw auch nicht ein...
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Ja klar.Bob13 hat geschrieben:Naja, bei webservern wird ja die verbindung nach "kurzer" zeit wieder beendet.
Aber muss denn zwangsweise ein Thread nur einen Client abarbeiten?Bob13 hat geschrieben: Bei einem chat server muss ja logischerweise die verbindung bestehen bleiben. Eine andere Lösung anstatt der mit Threads fällt mir btw auch nicht ein...
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Wie soll ich das problem denn sonst lösen?
Bei einem Webserver könnte man in einer endlosschleife einfach auf connects warten und dann header+seite zurück senden. Performanter wären vllt. 4 fixe Threads oder Prozesse, die die mehrere Anfragen gleichzeitig bearbeiten. Wenn die Daten gesendet wurden, wird die Verbindung geschlossen und der Thread wartet auf einen neuen Clienten.
Bei meinem Chatserver muss logischerweise(?) immer ein socket.recv pro Client auf Nachrichten warten. wenn aber von dem Clienten, von dem gerade empfangen wird, keine Nachricht kommt, wird das ganze Programm gestoppt. Deshalb bieten sich hier Threads an, oder etwa nicht?
Bei einem Webserver könnte man in einer endlosschleife einfach auf connects warten und dann header+seite zurück senden. Performanter wären vllt. 4 fixe Threads oder Prozesse, die die mehrere Anfragen gleichzeitig bearbeiten. Wenn die Daten gesendet wurden, wird die Verbindung geschlossen und der Thread wartet auf einen neuen Clienten.
Bei meinem Chatserver muss logischerweise(?) immer ein socket.recv pro Client auf Nachrichten warten. wenn aber von dem Clienten, von dem gerade empfangen wird, keine Nachricht kommt, wird das ganze Programm gestoppt. Deshalb bieten sich hier Threads an, oder etwa nicht?
@Bob13: Schau Dir mal das `select`-Modul aus der Standardbibliothek an. Du kannst auch mit einem Thread auf mehreren Sockets gleichzeitig ”lauschen”.
Vielen Dank!
Das sollte mein Problem lösen.
Durch google bin ich nebenbei auf folgende Website gestoßen, die das ganze relativ anschaulich erklärt.
http://www.nightmare.com/medusa/async_sockets.html
Das sollte mein Problem lösen.
Durch google bin ich nebenbei auf folgende Website gestoßen, die das ganze relativ anschaulich erklärt.
http://www.nightmare.com/medusa/async_sockets.html
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Eigentlich immer zu empfehlen sind auch Doug Hellmans "Module of the Week"-Seiten: Link
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Der traditionelle Vertreter in diesem Feld ist twisted, und neuerdings haben sich tornado & gevent einen Namen gemacht.
Und jetzt das...
Übrigens habe ich, wie man ja der Fehlermeldung entnehmen kann, das ganze mit Twisted versucht zu lösen.
Hat irgendjemand eine Idee, das ganze zu lösen?
Zufrieden wäre ich mit ~1000 clienten
Edit: Das ganze wurde jetzt auf einem windows pc getestet
Edit2: Hier scheint die Lösung aufgeführt: http://www.mail-archive.com/twisted-pyt ... 00514.html
Nach dem sich etwa 510 clienten mit dem server verbunden haben, scheint select probleme zu bekommen.--- <exception caught here> ---
File "C:\python27\lib\site-packages\twisted\internet\selectreactor.py", line 1
04, in doSelect
[], timeout)
File "C:\python27\lib\site-packages\twisted\internet\selectreactor.py", line 4
0, in win32select
r, w, e = select.select(r, w, w, timeout)
exceptions.ValueError: too many file descriptors in select()
Unhandled Error
Traceback (most recent call last):
File "server5.py", line 68, in <module>
reactor.run()
File "C:\python27\lib\site-packages\twisted\internet\base.py", line 1162, in r
un
self.mainLoop()
File "C:\python27\lib\site-packages\twisted\internet\base.py", line 1174, in m
ainLoop
self.doIteration(t)
--- <exception caught here> ---
Übrigens habe ich, wie man ja der Fehlermeldung entnehmen kann, das ganze mit Twisted versucht zu lösen.
Hat irgendjemand eine Idee, das ganze zu lösen?
Zufrieden wäre ich mit ~1000 clienten
Edit: Das ganze wurde jetzt auf einem windows pc getestet
Edit2: Hier scheint die Lösung aufgeführt: http://www.mail-archive.com/twisted-pyt ... 00514.html