Beenden Sie einen Clojure-Core ordnungsgemäß. async go loop on kill

8

Ich habe eine Top-Level- core.async Schleife gehen. Ich will es auf unbestimmte Zeit laufen, zumindest, bis ich es Signal mit CTRL-C oder zu töten oder ähnlich. Ich bin derzeit mit java.lang .Runtime / addShutdownHook wie folgt:

%Vor%

Hier sind meine Probleme:

  1. Wenn ich die REPL und (run) starte, startet sie und läuft in einem Hintergrundthread. Wenn ich die REPL verlasse, sehe ich nicht die gewünschte Nachricht zum Herunterfahren.

  2. Allerdings, wenn ich von lein run laufen, die Go-Schleife beendet sofort und zeigt "shutdown".

Weder ist was ich will.

Ich erwarte nicht unbedingt eine Lösung, die für alle JVMs funktioniert. Ich entwickle auf einem Mac und deploy auf Ubuntu, also würde ich gerne eine Lösung finden, die für beide funktioniert:

  • Mac JVM: java version "1.7.0_45" Java (TM) SE Runtime Environment (build 1.7.0_45-b18) Java HotSpot (TM) 64-Bit Server VM (Build 24.45-b08, mixed mode)

  • Ubuntu JVM: Java-Version "1.7.0_25" OpenJDK-Laufzeitumgebung (IcedTea 2.3.10) (7u25-2.3.10-1ubuntu0.12.04.2) OpenJDK 64-Bit-Server-VM (Build 23.7-b01, gemischter Modus)

David J. 10.12.2013, 02:56
quelle

2 Antworten

4

go function gibt einen Kanal zurück. Möglicherweise möchten Sie (close! chan) im Shutdown-Hook.

Wenn Sie lein run ausführen, benötigen Sie eine Hauptfunktion, die (run) aufruft, um den Thread zu starten.

%Vor%     
edbond 10.12.2013, 11:27
quelle
-1

Zu Teil 1: "Wenn ich die REPL verlasse, sehe ich nicht die gewünschte Nachricht zum Herunterfahren." Ich denke, der Thread zum Herunterfahren ist nicht mit der Konsole von lein repl verbunden.

Zu Teil 2: Nachdem die go-Schleife gestartet wurde, wird sie in Hintergrundthreads ausgeführt. Da der Haupt-Thread nach dem Erstellen des Go-Blocks beendet wird, wird das Programm beendet. Um die Schleife langlebig zu machen, muss sie in ein normales loop gebracht werden. (Es ist auch viel schöner, ein Thread/sleep hinein zu legen!)

    
David J. 10.12.2013 04:19
quelle

Tags und Links