Ho un'app di elaborazione clojure che è una pipeline di canali. Ogni fase di elaborazione esegue i suoi calcoli in modo asincrono (ad es. Fa una richiesta http usando http-kit o qualcosa del genere) e la mette sul canale di uscita. In questo modo il prossimo passo può leggere da quel canale e fare il suo calcolo.Come arrestare al meglio una pipeline di processi core.async di clojure
mia funzione principale è simile al seguente
(defn -main [args]
(-> file/tmp-dir
(schedule/scheduler)
(search/searcher)
(process/resultprocessor)
(buy/buyer)
(report/reporter)))
Attualmente, il passo di pianificazione spinge la pipeline (non ha un canale di ingresso), e fornisce la catena con carico di lavoro.
Quando ho eseguito questo nel REPL:
(-main "some args")
Si corre essenzialmente per sempre a causa della infinità dello scheduler. Qual è il modo migliore per cambiare questa architettura in modo tale da poter spegnere l'intero sistema dal REPL? La chiusura di ciascun canale significa che il sistema termina?
Potrebbe essere utile un canale di trasmissione?
'(Sistema/uscita 0)'? – Bill
Anche questo uccide la REPL, purtroppo. Proverò l'approccio Component –