Add parallel downloads
This commit is contained in:
parent
b765bd42b9
commit
c606c71cb7
1 changed files with 28 additions and 6 deletions
34
rain.scm
34
rain.scm
|
|
@ -3,13 +3,16 @@
|
||||||
exec csi -ss "$0" "$@"
|
exec csi -ss "$0" "$@"
|
||||||
|#
|
|#
|
||||||
|
|
||||||
|
(define parallel 1)
|
||||||
|
|
||||||
(import (chicken io)
|
(import (chicken io)
|
||||||
(chicken format)
|
(chicken format)
|
||||||
(chicken port)
|
(chicken port)
|
||||||
(chicken process-context)
|
(chicken process-context)
|
||||||
(html-parser)
|
(html-parser)
|
||||||
(http-client)
|
(http-client)
|
||||||
(matchable))
|
(matchable)
|
||||||
|
(srfi-18))
|
||||||
|
|
||||||
(define (find-comic-image index)
|
(define (find-comic-image index)
|
||||||
(call-with-current-continuation
|
(call-with-current-continuation
|
||||||
|
|
@ -27,16 +30,28 @@ exec csi -ss "$0" "$@"
|
||||||
(call-with-input-request (find-comic-image index)
|
(call-with-input-request (find-comic-image index)
|
||||||
#f
|
#f
|
||||||
(lambda (in)
|
(lambda (in)
|
||||||
(copy-port in out))))))
|
(copy-port in out)))))
|
||||||
|
(format (current-error-port) "* downloaded comic image ~a~%" index))
|
||||||
|
|
||||||
(define (download-all indices)
|
(define (download-all indices)
|
||||||
(for-each download-comic-image indices))
|
(format (current-error-port) "* using ~a threads~%" parallel)
|
||||||
|
(for-each download-batch (chop indices parallel)))
|
||||||
|
|
||||||
|
(define (download-batch batch)
|
||||||
|
(let ((threads (map (lambda (index)
|
||||||
|
(make-thread
|
||||||
|
(lambda ()
|
||||||
|
(download-comic-image index))))
|
||||||
|
batch)))
|
||||||
|
(for-each thread-start! threads)
|
||||||
|
(for-each thread-join! threads)))
|
||||||
|
|
||||||
(define (usage)
|
(define (usage)
|
||||||
(format (current-error-port) "usage: ~a [OPTION ...] [INDEX ...]~%" (program-name))
|
(format (current-error-port) "usage: ~a [OPTION ...] INDEX ...~%" (program-name))
|
||||||
(format (current-error-port) "options:~%")
|
(format (current-error-port) "options:~%")
|
||||||
(format (current-error-port) " -h|-help display this help message~%")
|
(format (current-error-port) " -h|-help display this help message~%")
|
||||||
(format (current-error-port) " -v|-version display version information~%"))
|
(format (current-error-port) " -v|-version display version information~%")
|
||||||
|
(format (current-error-port) " -j|-parallel N download N images in parallel~%"))
|
||||||
|
|
||||||
(define parse-command-line
|
(define parse-command-line
|
||||||
(match-lambda
|
(match-lambda
|
||||||
|
|
@ -44,6 +59,13 @@ exec csi -ss "$0" "$@"
|
||||||
(usage))
|
(usage))
|
||||||
(((or "-v" "-version") . _)
|
(((or "-v" "-version") . _)
|
||||||
(format (current-error-port) "rain.scm 1.0.0~%" (program-name)))
|
(format (current-error-port) "rain.scm 1.0.0~%" (program-name)))
|
||||||
|
(((or "-j" "-parallel") n . rest)
|
||||||
|
(let ((nn (string->number n)))
|
||||||
|
(unless nn
|
||||||
|
(usage)
|
||||||
|
(exit 1))
|
||||||
|
(set! parallel nn)
|
||||||
|
(parse-command-line rest)))
|
||||||
(()
|
(()
|
||||||
(usage))
|
(usage))
|
||||||
(indices
|
(indices
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue