Ich habe zwei Algorithmen A und B. Beide Algorithmen nehmen die gleiche Zeichenfolge als Eingabe, führen Sie die gleiche Transformation auf string und gibt eine neue Zeichenfolge zurück.Python 3: Wie starte ich 2 Prozesse geben Sie die Antwort von dem zuerst beendet, und stoppen Sie den anderen Prozess früh
Die durchgeführte Transformation kann manchmal sehr CPU-intensiv sein, und die Algorithmen haben unterschiedliche Ansätze für das Problem. Die Algorithmen verhalten sich abhängig von der Eingabe-Zeichenkette drastisch unterschiedlich, aber ich interessiere mich nur für die Antwort, nicht für welchen Algorithmus die Transformation angewendet wird.
Ich habe einige Pseudo-Code geschrieben, um das Problem ein wenig besser zu erklären:
def process_alg1(algorithm1, input_string)
ans_string = algorithm1(input_string)
q.put(ans_string)
def process_alg2(algorithm2, input_string)
ans_string = algorithm2(input_string)
q.put(ans_string)
def apply_transformation(input_string):
q = multiprocess.Queue()
process_alg1(input_string)
process_alg2(input_string)
final_answer = q.get()
stop(slowest_process)
Ich vermute, i-Daemon Prozesse verwenden müssen? Ich bin mir nur nicht sicher, welchen Ansatz ich überhaupt nehmen muss. Richte ich eine Pipeline zwischen Prozessen und einer Art Handler ein, die den langsameren Prozess zum Stoppen bringt? Kann ich das einfach mit Dämonen und einer Schlange machen?
Ich habe viele Beispiele für mehrere Eingaben für den gleichen Algorithmus gefunden, aber keine Beispiele für mehrere Algorithmen, die mit der gleichen Eingabe arbeiten.
Danke.
Sie den Hauptprozess regelmäßig brauchen würde, um das Kind Prozess abfragen 'exitcode' Attribut, um zu bestimmen, ob es noch beendet hat. Dann müssten Sie eine Art von gemeinsam genutzter Variable ändern, die das andere Kind (oder beide) regelmäßig überprüfen, damit sie es beenden können. Siggill zu senden ist nicht nett, und hat kein direktes Windows equivent. – Aaron
@Aaron, wenn ich einen Daemon-Prozess für beide verwenden und ich diese Funktion apply_transformation von einem anderen Teil meines Programms aufrufen, werden die Prozesse nach dem Aufruf apply_transformation oder nach dem Ende des gesamten Programms beendet? –
Es gibt nicht so etwas wie einen Dameon-Prozess. Nur Threads – Aaron