【问题标题】:Clojure program can't complete after runningClojure程序运行后无法完成
【发布时间】:2015-06-28 17:59:16
【问题描述】:

我的问题是执行 clojure 程序时出现意外情况。

我使用 Ubuntu 14.04 x64、Lein 和 Clojure(都是最后一个版本)。 我已经完成了我的小项目(网络爬虫,只是为了学习 clojure)。 它有效,我确定('因为我已经在 repl 中运行过它)。

好的,我正在尝试在终端中使用 lein 运行它(查看屏幕截图)。 它工作正常,然后打印经过的时间。 但是,它正在等待一些东西。那就是问题所在。程序无法停止,也无法将控制权返回给 ubuntu 的终端。我第一次面对它,我之前的所有项目都是自己编译的。现在唯一的方法是“Ctrl + C”。 在代码中,我使用“命令式”命令(doseq、do)、文件 i/o(带有打开的读取器/写入器)、代理(发送、等待)和“clj-http.client”来下载网页。它们是潜在的原因。

这是我的“主要”:

(defn crawl-bunch [depth]
  (do
    (send-off urls visit-urls)
    (await urls)
    (renew-urls)
    (await urls)
    (send-off urls mark-used-urls)
    (await urls)
    (dec depth)))

(defn crawl [depth]
  (loop [i depth]
    (if (= i 0)
      (save-found-urls "out_urls.txt")
      (recur (crawl-bunch i)))))

(defn -main [& args]
  (time 
   (do
    (file-to-urls "urls.txt")
    (crawl 1))))

这里是完整的源代码 - 近 100 个字符串 (/src/crawler/core.clj):https://github.com/ivanpetrov16130/crawler

请告诉我,如何解决? 感谢您的回答,请原谅语法、句法和逻辑错误。

【问题讨论】:

  • zero323,它调用“crawl-bunch”函数,该函数访问“agent”中的所有url,然后返回递减的“i”。我的错误,我应该将此功能添加到我的问题中。
  • 在退出前尝试运行shutdown-agents
  • bsvingen,谢谢,它有效!这么简单……
  • 太好了,我会写它作为答案。
  • 如果解决了您的问题,请接受 bsvingen 的回答;无需在问题中添加“更新”。

标签: ubuntu clojure terminal web-crawler leiningen


【解决方案1】:

您需要运行shutdown-agents 才能关闭代理使用的线程池。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多