Programm über paramiko starten

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
AndiArbeit
User
Beiträge: 21
Registriert: Freitag 11. Juli 2014, 13:26

Hallo liebes Python-Forum,

ich versuche mich momentan an Paramiko.
Mein Ziel ist ein "Master" der im Netzwerk Aufgaben verteilt.

Die Grundstruktur steht soweit, mein Problem ist die Ausführung der Berechnung (LSDyna) über Paramiko.
Die Rechnungen laufen mehrere Stunden und und haben exorbitante Datenmengen (bis zu mehreren hundert GB).

Ist in diesem Fall der Ansatz das ganze über Paramiko durchzuführen richtig ?

Code: Alles auswählen

class connection():
  
  def start(self,rechner):
    
    self.client = paramiko.Transport((rechner, 22))
    self.client.connect(username=login.name, password=login.passwort)
  
  def run_subprozess(self,befehl):

    self.session = self.client.open_channel(kind='session')
    self.session.exec_command(befehl)


connection = connection()
connection.start(rechner)
befehl = "Befehl zum Starten"

sub = multiprocessing.Process(target=connection.run_subprozess,args=[befehl])
sub.start()      
Gruß AndiArbeit
Zuletzt geändert von Anonymous am Dienstag 18. Oktober 2016, 15:04, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
BlackJack

@AndiArbeit: Sieht ein bisschen umstdändlich aus. Warum die Klasse? Warum hat die keine `__init__()`? Warum der Prozess? Und müsste danach nicht noch was passieren, also zum Beispiel auf das Ende des Prozesses warten?

Es gibt doch für so etwas sicher schon vorhandene Software‽ Und mich persönlich würde es nervös machen, wenn auf der anderen Seite nicht screen oder tmux läuft, damit der Prozess dort nicht abbricht wenn die SSH-Verbindung aus welchen Gründen auch immer wegbrechen sollte.
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@AndiArbeit: warum benutzt Du multiprocessing? Die Befehle laufen doch sowieso im Hintergrund. Das was Du da als eigene Klasse zusammenstellst, gibt es doch schon paramiko.Client:

Code: Alles auswählen

def connect(rechner):
    client = SSHClient()
    client.load_system_host_keys()
    client.connect(rechner)
    return client

connection = connect(rechner)
befehl = "Befehl zum Starten"
stdin, stdout, stderr = client.exec_command(befehl)
AndiArbeit
User
Beiträge: 21
Registriert: Freitag 11. Juli 2014, 13:26

Schonmal danke für die Antworten.

Ich nutze den Prozess weil parallel auf x Rechnern gearbeitet wird und immer wenn einer fertig ist er eine neue Rechnung startet.
Über den SSHClient funktioniert das ganze sehr gut. Ich muss nur über recv_exit_status() auf das Prozessende warten.
Antworten