FTP Connection Pool

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Herr Lehmann
User
Beiträge: 81
Registriert: Samstag 14. August 2010, 22:20

Hallo,

ich möchte mit meinem Programm relativ viele FTP Verbindungen verwalten. Dazu würde ich gerne für jede Serververbindung einen eigenen Thread starten und nach erfolgtereicher Verbindung Befehle an diese FTP Verbindung von ausserhalb schicken.
Mein Problem ist, dass mir nicht ganz klar ist wie ich den Status der Verbindungen aus den Threads erhalten könnte.
Ich brauche die Information ob eine Verbindung zu einem Server aufgebaut wurde, ob diese benutzt wird und schließlich ob eine Verbindung wieder geschlossen wurde.

Ich habe schon nach Kommunikation mit Threads gegoogelt, finde dort aber nur die Möglichkeit mit einer Queue zu arbeiten. Ich kann mir da allerdings nicht vorstellen das das die Optimale Lösung ist wenn ich nur den Status abfragen will.
BlackJack

@Herr Lehmann: Neben Queues gibt es noch `Event`\s und `Condition`\s im `threading`-Modul und natürlich gehen auch beliebige selbst geschriebene Methoden oder Properties, wenn man sie entsprechend mit Sperren (`Lock`, `RLock`) absichert. Man muss dann halt nur immer auf die üblichen Probleme bei Nebenläufigkeit achten.

Alternativ zu Threads würde sich bei wirklich vielen Verbindungen vielleicht auch ein ereignisbasierter Ansatz wie die `twisted`-Bibliothek anbieten. Oder eventuell auch `gevent`, wobei man da schauen müsste wie gut die `ftplib` aus der Standardbibliothek über das „monkey patching” veränderbar ist.
Herr Lehmann
User
Beiträge: 81
Registriert: Samstag 14. August 2010, 22:20

BlackJack hat geschrieben:...
Alternativ zu Threads würde sich bei wirklich vielen Verbindungen vielleicht auch ein ereignisbasierter Ansatz wie die `twisted`-Bibliothek anbieten. Oder eventuell auch `gevent`, wobei man da schauen müsste wie gut die `ftplib` aus der Standardbibliothek über das „monkey patching” veränderbar ist.
Danke für die Antwort, twisted habe ich mir schon angesehen, allerdings bin ich mir noch nicht so ganz über die vorteile im klaren bzw ob ich diese auch in meinem Projekt umsetzten kann.
Was die Anzahl der Verbindungen betrifft kann man so von 400 - 600 gleichzeitigen Verbindungen ausgehen. Ist da gevent oder twisted schon empfehlenswert? Wie schon gesagt es geht mir in erster Linie darum, die Kontrolle über die Verbindungen zu behalten und immer genau zu wissen welcher Server bereits verbunden ist usw.
BlackJack

@Herr Lehmann: Das ist eine Anzahl bei der ich bestimmt nicht mehr auf Threads setzen würde. Kannst ja mal versuchen wie viele Du überhaupt gestartet bekommst. Jeder Thread braucht mindestens den Speicher für einen eigenen Aufrufstapel. Das kann auch stark vom Betriebssystem abhängen.
Antworten