Last active
June 1, 2017 14:16
-
-
Save amoe/7fdc89163069abc53c46192d805398e3 to your computer and use it in GitHub Desktop.
minimum wait queue
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(ns wn-backend.concdemo | |
(:require [wn-backend.util.common :refer :all] | |
[clj-http.client :as client]) | |
(:import [java.util.concurrent LinkedBlockingQueue])) | |
(def my-queue (LinkedBlockingQueue.)) | |
(def queue-minimum-delay 1000) | |
(defn queue-processor [] | |
(loop [] | |
(debugp "waiting on queue" true) | |
(let [item (.take my-queue)] | |
(debugp "took item from queue" item) | |
(deliver (:promise item) | |
(client/get (:url item)))) | |
(Thread/sleep queue-minimum-delay) | |
(when-not (Thread/interrupted) | |
(recur)))) | |
(defn wait-for-request [url] | |
(let [delivery-promise (promise)] | |
;; This will never error or block. | |
(.add my-queue | |
{:url url | |
:promise delivery-promise}) | |
(-> delivery-promise deref))) | |
(defn foo [] | |
(wait-for-request "http://www.example.com/")) | |
(def processor-handle (atom nil)) | |
(defn start-queue! [] | |
(reset! processor-handle (future (queue-processor)))) | |
(defn stop-queue! [] | |
;; XXX return value? | |
(future-cancel @processor-handle)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment