RosettaCodeData/Task/Distributed-programming/Racket/distributed-programming.rkt

25 lines
730 B
Racket

#lang racket/base
(require racket/place/distributed racket/place)
(define (fib n)
(if (<= n 1) n (+ (fib (- n 1)) (fib (- n 2)))))
(provide work)
(define (work)
(place ch
(place-channel-put ch (fib (place-channel-get ch)))))
(module+ main
(define places
(for/list ([host '("localhost" "localhost" "localhost" "localhost")]
[port (in-naturals 12345)])
(define-values [node place]
(spawn-node-supervise-place-at host #:listen-port port #:thunk #t
(quote-module-path "..") 'work))
place))
(message-router
(after-seconds 1
(for ([p places]) (*channel-put p 42))
(printf "Results: ~s\n" (map *channel-get places))
(exit))))