Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (define-condition error-503 (error)
- ((url :initarg :url)))
- (defclass webpage ()
- ((url :initarg :url)))
- (defun http-get (url)
- (format t "Retrieving: ~S~%" url)
- (when (= (random 10) 0)
- (error 'error-503 :url url))
- (make-instance 'webpage :url url))
- (defun crawl (urls)
- (handler-bind ((error-503 #'(lambda (e)
- (format t "Info: ~A~%" e)
- (invoke-restart 'retry-a-bit-later))))
- (let ((web-pages '()))
- (dolist (url urls)
- :again
- (restart-case
- (push (http-get url) web-pages)
- (retry-a-bit-later ()
- (format t "Let's retry in 10 seconds again...~%")
- (sleep 10)
- (go :again))))
- web-pages)))
- ;;; run e.g. with
- ;;; (crawl (loop for i from 0 below 10 collect (format nil "http://foo.com/~D.html" i)))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement