2017-09-19 1 views
0

Ich habe eine Funktion, die 2 Argumente erhält. Diese Funktion verbindet tatsächlich bestimmte Kommunikationsgeräte und schreibt mehrere Zeilen in ihr CLI.Wie führe ich gleichzeitig die gleiche Funktion mit 4 verschiedenen Paaren von Argumenten aus?

Ich muss dieses CLI schreiben gleichzeitig auf 4 Geräten schreiben.

mit dem folgenden Code (nur ein Beispiel beziehen sich nicht auf den Inhalt von func1) Ich weiß, wie Sie einen Thread ausführen, der diese Funktion ausführt. Aber ich weiß nicht, wie man 4 Threads startet.

import _thread 

def func1(arg1, arg2): 
    print("Write to CLI") 


_thread.start_new_thread(func1, (DUT1_CLI, '0')) 
+0

Sie können einfach auf der nächsten Zeile neuen invoke des Fadens, beispielsweise schreiben: '_thread.start_new_thread (func1, (DUT1_CLI, '0')) _thread.start_new_thread (func1, (DUT2_CLI, '0')) ' Der Differenziator ist –

+0

In Python, wenn jeder Name mit einem Unterstrich beginnt, sollten Sie es vermeiden (in diesem Fall, das Modul zu importieren). Werfen Sie einen Blick auf diese Frage für weitere Details: https://stackoverflow.com/questions/1301346/what-is-the-meaning-of-a-single-and-a-double-underscore-before-an-o-object- Name – GPhilo

+0

Überlegen Sie, _thread für [threading] zu ändern (https://docs.python.org/2/library/threading.html) – GPhilo

Antwort

1

Wiederholen Sie einfach Ihre letzte Zeile vier Mal.

oder eine Schleife verwenden:

for _ in range(4): 
    _thread.start_new_thread(func1, (DUT1_CLI, '0')) 

jeder Ausführung der Linie wird ein neuer Thread beginnen, die auch parallel laufen in diesem Moment beginnt. Ihre vier Threads könnten also ziemlich schnell gestartet werden und dann eine Ausgabe erzeugen. Abhängig von der Pufferung, Ihrem Terminal-Typ usw. kann dies sogar zu einer vermischten Ausgabe führen (zwei "Hello World" -Ausgaben könnten in harten Fällen zu "HelHello Wlo Wororldld" werden).

+0

Großartig, funktioniert gut. Wenn ich es richtig verstehe, werden alle Threads automatisch geschlossen und halten keine Ressourcen mehr, wenn sie ihre Aufgaben erledigt haben. Recht ? –

+0

Das ist technisch eine neue Frage, aber ja. Wenn ein Thread nichts mehr zu tun hat, wird er beendet. Der Vater-Thread sollte jedoch() 'diesem Thread beitreten(). Ansonsten verweilen einige interne Datenstrukturen und warten auf diesen Verbindungsschritt. Wenn der gesamte Prozess beendet wird, werden alle Threads trotzdem bereinigt. – Alfe

+0

Kann ich mit demselben Thread zwei Funktionen (nacheinander) ausführen? Oder muss ich diese Aufgaben unter der gleichen Funktion sammeln, um diese Aufgabe zu erfüllen? –

Verwandte Themen