4

我目前只是通过调度程序运行任务。它运行几分钟。我没有理由认为它因为运行时间过长而被关闭,但我想知道它是否应该是一个工作线程。

如何在工作线程上启动 clojure 进程?是否像调整 ProcFile 和调度程序命令一样简单?

我的 ProcFile:

web: lein with-profile 生产蹦床运行 -m webhook.server

我的应用程序: - 每小时一次,通过对另一台服务器的预定 Web 服务调用将数据提取到 Heroku db。- 按需,基于环的 Web 服务将 JSON 数据提供给 Web 上其他地方的另一个进程。

4

1 回答 1

1

似乎您可以创建一个 Heroku “Worker” dyno 来启动一个普通的旧 Java 线程。例如,您可以有一个具有-main使用并发功能的 Clojure 应用程序,即

(defn -main [&args]
  (doseq [res (map deref [(future "task 1")
                          (future "task 2")
                          (future "task 3"])]
    (save-results res)))

哪里save-results是一个虚构的功能,可以将您的工作人员结果保存在某个地方,发送电子邮件等等。

请注意,这可能是一种更好的方法,即使用代理或Clojure 工具箱中列出的 Clojure 调度库之一(即 Quartzite)。我的示例是一个非常简单(天真的?)示例,它证明了 Heroku 工作人员测功机中的并发性。

有关更多讨论,请参见此处: https ://groups.google.com/forum/#!topic/clojure/xQs6MqD3680

此外,我还发现很多 关于在单个 Heroku dyno 上运行多个线程的博客文章/文章。它将您限制为每个测功机 255 个线程。

更新我为上述创建了一个概念验证:

https://github.com/noahlz/worker-sample

于 2013-07-21T16:23:59.247 回答