У меня есть список ISBN, которые выполняют поиск в Amazon. Я уже решил это последовательно, поэтому теперь задача заключается в реализации параллелизма. Я попробовал это, используя 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))))])
)
)
название прибудете:
(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)
oh аккуратный! плохо посмотрите, работает ли это для меня. –