【发布时间】:2016-11-15 06:10:08
【问题描述】:
我有一个对亚马逊进行搜索的 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))))])
)
)
获取标题:
(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)
【问题讨论】:
标签: asynchronous concurrency clojure