eigenen Prozess 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
The Hit-Man
User
Beiträge: 435
Registriert: Montag 20. Februar 2006, 18:11
Wohnort: Menden / Sauerland
Kontaktdaten:

Ich versuche gerade einen eigenen Prozess zu starten und zwar zum tunneln des mySQL Ports:

Code: Alles auswählen

	p = Process(target=tunnel.makeTunnel, args=('***', '***',
		'htm-network.dyndns.org', '127.0.0.2', 3306,))
	p.start ()
Ohne eigenen Prozess, klappt das tunneln mit meiner Routine auch ohne Probleme. Wenn ich die Methode aber als eigenen Prozess starten will, bekomme ich eine solche Fehlermedung, mit der ich nichts anfangen kann.
Connecting to ssh host htm-network.dyndns.org:22 ...
No handlers could be found for logger "paramiko.transport"
*** Failed to connect to htm-network.dyndns.org:3306: AssertionError('PID check failed. RNG must be re-initialized after fork(). Hint: Try Random.atfork()',)
Weiß da jemand von Euch bescheid? Verstehe nicht, das da ein logger gebraucht wird. Da wie gesagt, die Routine ohne eigenen Task funktioniert.
lunar

@The Hit-Man: Woher kommt "Process"?! Der Inhalt der Fehlermeldung ist im Übrigen nicht, dass kein Logger konfiguriert ist. Lies die darauf folgende Zeile.

Bei allem Respekt, nach 300 Beiträgen solltest Du eigentlich in der Lage sein, Fehlermeldungen selbstständig zu lesen, und Dein Problem vollständig mit sinnvollen Quelltextbeispielen zu beschreiben :roll:
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Aus welcher Library kommt die `Process`-Klasse?
The Hit-Man
User
Beiträge: 435
Registriert: Montag 20. Februar 2006, 18:11
Wohnort: Menden / Sauerland
Kontaktdaten:

kommt aus dieser lib
from multiprocessing import Process

ja wenn ich wüßte, wie ich es richtig machen kann, würde ich hier nicht nachfragen :(
Ich dachte immer, es gibt keine dumme Fragen, sondern nur dumme Antworten. Ich probiere immer erst aus, den Fehler selber zu finden oder suche nach Beispielen. Python ist nun mal echt mächtig oder kennst du jedes Modul auswendig?
deets

@The Hit-Man

es geht nicht darum, alles auswendig zu koennen. Es geht darum

- hier genug Kontext mitzuliefern, damit andere, welche dir helfen wollen, das effektiv koennen
- sich die Faehigkeit anzueignen, selber nach Fehlern zu suchen, indem man die Fehlermeldungen richtig liest, und google benutzt

Und insofern gibt es zwar vielleicht keine dummen Fragen, aber auch die Frage danach, wieso du dich nicht verbesserst - und die ist dann doch wohl genausowenig dumm und darf beantwortet werden, oder?
The Hit-Man
User
Beiträge: 435
Registriert: Montag 20. Februar 2006, 18:11
Wohnort: Menden / Sauerland
Kontaktdaten:

Es bringt doch jetzt nichts, sich zu streiten ... und wieso zu wenig Kontext?
Mehr als meinen Code und die Fehlermeldung kann ich doch nicht mitsenden.
Ist auch egal.

EDIT:
Es sieht wohl eher aus, als wäre es ein Bug, in der paramiko lib, so weit ich das sehen kann.

Mit der neuen Paramiko Version gehts dann. Trotzdem danke
Benutzeravatar
ocoal
User
Beiträge: 32
Registriert: Mittwoch 20. Juli 2011, 22:44

Hallo Hit-Man

... am besten nächstes mal nicht vergessen zu beschreiben, welche 3rd Party Libraries Du im Einsatz hast und aus denen Du importierst - das wäre u.a. dann auch der gemeinte und in Deinen initialen Post nicht so richtig erkennbare Kontext.

Aus der Fehlermeldung und dem Modul "multiprocessing" hätte man vielleicht (aber auch nur vielleicht ;) ) "erraten" können, dass es sich um paramiko handelt. Wäre aber noch kein eindeutiger Indiz gewesen und lediglich geraten.

Anmerkung: Hast Du alternativ den Patch von paramiko ausprobiert, der in dem dazugehörigen Bug-Ticket aufgeführt wurde? Beste Grüße,
-Colin-
The Hit-Man
User
Beiträge: 435
Registriert: Montag 20. Februar 2006, 18:11
Wohnort: Menden / Sauerland
Kontaktdaten:

Also mit der neuen Version ( hatte ich auf der Paramiko-Seite gefunden ), geht es. Jetzt hänge ich natürlich an einer anderen Sache. Da ich ja versuche zu tunneln ( Port 3306 ) muß ich den Tunnel als eigenen Prozess starten ( was ich auch mache ). Nur wie bekomme ich dann raus, das der Tunnel aufgebaut worden ist ... Auch wenns hier vielleicht nicht gerade hin gehört. Meine Routine sieht so aus:

Code: Alles auswählen

def makeTunnel (username, password, server, local, port):   
    client = paramiko.SSHClient()
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

    verbose('Connecting to ssh host %s:%d ...' % (server, 22))
    try:
        client.connect(server, 22, username=username, password=password)
    except Exception, e:
        print '*** Failed to connect to %s:%d: %r' % (server, port, e)
        sys.exit(1)

    verbose('Now forwarding port %d to %s:%d ...' % (port, local, port))

    try:
        forward_tunnel(port, local, port, client.get_transport())
    except KeyboardInterrupt:
        print 'C-c: Port forwarding stopped.'
        sys.exit(0)
starten tue ich den Prozess so:

Code: Alles auswählen

	p = Process(target=tunnel.makeTunnel, args=('user', 'pass',
		'htm-network.dyndns.org', '127.0.0.2', 3306,))
	p.start ()
Das funktioniert auch ohne Probleme. Allerdings braucht der Tunnel eine Zeit, bis er steht und ich weiß nicht genau, wie ich feststellen kann, ob er steht. Das Tunnel-Programm beendet sich ja nicht und damit kann ich auch kein return zurück geben. Und hey Leute, ich bin doch nur nen Hobbyprogrammierer.
The Hit-Man
User
Beiträge: 435
Registriert: Montag 20. Februar 2006, 18:11
Wohnort: Menden / Sauerland
Kontaktdaten:

Habs dann erst mal über ein pid File gelöst. Allerdings scheint mir das super unsauber zu sein.
deets

Du koenntest ueber das socket-Modul versuchen, eine Verbindung zum Tunnel-Port aufzubauen.

Oder einfach deinen bestehenden Code benutzen & zb in einer Schleife 10 mal ausfuehren, mit jeweiln einer halben Sekunde Pause, bis die Verbindung steht. Denn letztlich macht Paramiko ja auch nix anderes als einen socket-Call.

Wenn dann 10 (oder 100) Verbindungsversuche gescheitert sind, dann musst du davon ausgehen, dass der Tunnel nicht aufgebaut werden kann & abbrechen.
The Hit-Man
User
Beiträge: 435
Registriert: Montag 20. Februar 2006, 18:11
Wohnort: Menden / Sauerland
Kontaktdaten:

Ich denke, ich werde die Sache einfach versuchen, per VPN zu lösen. Ist der einfachste Weg ...
Dann muß ich mich um die Netzwerksachen ja nicht mehr kümmern. Muß dann nur mal eben nachschauen, wie ich unter squeeze nen open-vpn hin bekomme. Aber das hatte ich irgendwann mal gemacht. Ich wollte allerdings nicht so viele Ports im Router auf machen.
Antworten