아마존을 검색하는 ISBN 목록이 있습니다. 나는이 문제를 순차적으로 해결 했으므로 이제는 동시성을 구현해야한다. 나는 core.async
을 사용하여 그것을 시도했다. 내가 겪고있는 문제는 검색이 완료된 후에 모든 책을 컬렉션으로 병합 할 수 있어야만 도서 순위별로 정렬 할 수 있어야한다는 것입니다. 버퍼 크기가 10 인 채널 하나를 사용하고 있기 때문에이를 수행하는 방법을 잘 모릅니다. 내 접근 방식이 완전히 틀릴 수도 있습니다. 도움을 주시면 감사하겠습니다. 여기 비동기 채널 버퍼 병합
(def book_channel (chan 10))
(defn concurrency_test [list_of_isbns]
([doseq [isbn list_of_isbns]
(go(>! book_channel(get_title_and_rank_for_one_isbn(amazon_search isbn))))])
)
)
GET 제목 :
(defn get_title_and_rank_for_one_isbn [amazon_report]
(def book_title (get-in amazon_report [:items 0 :item-atributes :title]))
(def sales_rank(get-in amazon_report [:items 0 :SalesRank]))
(def book_isbn(get-in amazon_report [:items 0 :asin]))
(reduce into [[book_title] [book_isbn] [sales_rank]]))
하고 통화 :
(def list_of_isbns (split_isbns "src/clj_amazon/isbn_list.txt"))
(concurrency_test list_of_isbns)
오 깔끔한! 이게 나에게 효과가 있는지 아프다. –