0
我正在构建一个阻止HTTP调用的应用程序。我想在块前打印一些内容,然后在阻塞调用完成后继续执行某些操作。我的第一个因子评分是不喜欢这样何时发生副作用?
(print "Processing " item-hash "...")
(query-item item-hash)
(Thread/sleep 10000)
(println "Done")))
睡眠是那里只是慢下来更是100%肯定它做什么,它应该。
在我的理解中,应该打印信息,开始query-item
,然后睡10秒,然后打印Done
。但是目前我们等待,直到整个父sexpr完成后,打印(打印时,所有的阻塞调用完成整条生产线。
整个主参考
(defn -main [& echo]
(map
(fn [url]
(let [item-hash (market-listing-url-to-hash-name url)]
(print "Processing " item-hash "...")
(query-item item-hash)
(Thread/sleep 10000)
(println "Done")))
(collect-urls 1)))
感谢
为什么放慢速度可以确保它确实执行它应该做的事情?另外,地图很懒,你想要pmap吗? –
查询项目现在速度很快,所以我不完全确定它是否先打印出“Processing ...”,然后再打印出“完成”。感谢您提供pmap,但我无法并行执行。 'query-item'正在打第三方HTTP API,每秒只允许几个请求。经过一番周折后,我发现如果我(println)而不是(print),它会按预期工作。输出缓冲区可能会在换行符上刷新? –