pmapp.rkt (764B)
1 #lang racket 2 3 (require racket/place) 4 (require racket/runtime-path) 5 6 (define-runtime-path worker "pmapp_worker.rkt") 7 ;(define pa (build-path (current-directory) "pmapp_worker.rkt")) 8 9 (provide pmapp) 10 11 (define (transpose lists) ; collumns to rows! 12 (apply map list lists)) 13 14 (define (pmapp func . args) ;start places, give work, collect results, stop places. 15 16 (define jlist (transpose args)) 17 (display jlist) 18 19 (let* ([pls (for/list ([i (in-range (length jlist))]) 20 (dynamic-place worker 'pmapp-worker ))] 21 [wpls (for/list ([j pls][w jlist]) 22 (place-channel-put j (append (list func) w)))] 23 [rlist (for/list ([v pls]) (place-channel-get v))] 24 [stop (map place-wait pls)]) 25 rlist 26 )) 27 28 29 30 31