A Nim scheduler library that lets you kick off jobs at regular intervals.
- Simple to use API for scheduling jobs.
- Support scheduling both async and sync procs.
- Lightweight and zero dependencies.
$ nimble install schedules
import schedules, times, asyncdispatch schedules: every(seconds=10, id="tick"): echo("tick", now()) every(seconds=10, id="atick", async=true): echo("tick", now()) await sleepAsync(3000)
- Schedule thread proc every 10 seconds.
- Schedule async proc every 10 seconds.
- Don't forget adding
--threads:onwhen compiling your application.
- The library schedules all jobs at a regular interval, but it'll be impacted by your system load.
By default, only one instance of the job is to be scheduled at the same time. If a job hasn't finished but the next run time has come, the next job will not be scheduled.
You can allow more instances by specifying
throttle=. For example:
import schedules, times, asyncdispatch, os schedules: every(seconds=1, id="tick", throttle=2): echo("tick", now()) sleep(2000) every(seconds=1, id="async tick", async=true, throttle=2): echo("async tick", now()) await sleepAsync(4000)
Sometimes, you want to run the scheduler in parallel with other libraries.
In this case, you can create your own scheduler by macro
start it later.
Below is an example of co-exist jester and nim-schedules in one process.
import times, asyncdispatch, schedules, jester scheduler mySched: every(seconds=1, id="sync tick"): echo("sync tick, seconds=1 ", now()) router myRouter: get "/": resp "It's alive!" proc main(): # start schedules asyncCheck mySched.start() # start jester let port = paramStr(1).parseInt().Port let settings = newSettings(port=port) var jester = initJester(myrouter, settings=settings) # run jester.serve() when isMainModule: main()
Set Start Time and End Time
You can limit the schedules running in a designated range of time by specifying
endTime. For example,
import schedules, times, asyncdispatch, os scheduler demoSetRange: every( seconds=1, id="tick", startTime=initDateTime(2019, 1, 1), endTime=now()+initDuration(seconds=10) ): echo("tick", now()) when isMainModule: waitFor demoSetRange.start()
- v0.1.0, TBD.
- Support macro
- Support macro
- Support setting
Nim-schedules is based on MIT license.