mpenet / Knit
Thin wrapper around Java Executors/Threads, including configurable `future`, `c.core/thread`, and `future-call`
Stars: ✭ 30
Labels
knit
Thin wrapper around Java Executors/Threads, including executors aware
versions of future
, clojure.core.async/thread
,
clojure.core.async/thread-call
and future-call
.
Installation
Changelog
1.0.0
-
Breaking changes : there are no longer a single arg versions of
knit/future
andknit/thread
, just useclojure.core
equivalents in these cases. Also the multi arg version of these 2 macros now takes the option map as last argument instead of first.
Usage
(use 'qbits.knit)
Executors
Executor can be :fixed
:cached
:single
:scheduled
, matching the
corresponding Java instances.
(def x (executor :fixed))
With all options
(def x (executor :fixed {:num-threads 3 :thread-factory a-thread-factory}))
Submit a task to executor
(execute x #(println "Hello World"))
ThreadFactory
(def tf (thread-factory))
With all options
(def a-thread-group (thread-group "knit-group"))
(def tf (thread-factory {:thread-group a-thread-group
:daemon false}))
ThreadGroup
Identical to the Java version
(thread-group "name")
(thread-group parent-group "name")
ScheduledFuture
(schedule :at-fixed-rate 200 #(println "hello world"))
Supports :at-fixed-rate
:with-fixed-delay
:once
, matching the
corresponding Java methods.
With all options:
(schedule :at-fixed-rate 2 #(println "hello world")
{:initial-delay 1
:executor (executor :scheduled
:num-threads 3
:thread-factory a-thread-factory)
:unit :minutes})
Time units are :days
:hours
:minutes
:seconds
:milliseconds
:microseconds
:nanoseconds
Clojure like future and core.async/thread* with configurable execution context
(qbits.knit/future (System/currentTimeMillis) {:executor x})
(qbits.knit/future-call #(System/currentTimeMillis) {:executor x})
;; core.async/thread
(qbits.knit/thread (System/currentTimeMillis) {:executor x} )
(qbits.knit/thread-call #(System/currentTimeMillis) {:executor x})
License
Copyright © 2015 Max Penet
Distributed under the Eclipse Public License, the same as Clojure.
Note that the project description data, including the texts, logos, images, and/or trademarks,
for each open source project belongs to its rightful owner.
If you wish to add or remove any projects, please contact us at [email protected].