Yesterday I had a need to do some batch processing, making many HTTP calls to crawl a government website to pull down some public data. I didn’t want to run this during normal hours, because I didn’t want to put a strain on their server. I had the web crawling sorted out as a function using drakma and cl-ppcre to get the data I wanted.
I wasn’t sure how best to schedule this function to run later that night, and was about to dig into anacron and figure out the right command-line flags to sbcl, when Nathan suggested the obvious: why not have lisp schedule it? It was very easy to throw something together using sleep and get-universal-time. This morning I abstracted that into a helper function using SBCL Threading:
(defun run-later (utime-to-run function) (sb-thread:make-thread #'(lambda () (sleep (- utime-to-run (get-universal-time))) (funcall function))))
Very handy, doesn’t lock my repl, scratches my itch, and easy to write.
One Comment