Seite 1 von 1

Programm über paramiko starten

Verfasst: Dienstag 18. Oktober 2016, 14:45
von AndiArbeit
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

Re: Programm über paramiko starten

Verfasst: Dienstag 18. Oktober 2016, 15:11
von 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.

Re: Programm über paramiko starten

Verfasst: Mittwoch 19. Oktober 2016, 07:22
von Sirius3
@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)

Re: Programm über paramiko starten

Verfasst: Mittwoch 19. Oktober 2016, 10:19
von AndiArbeit
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.