4

現在、スケジューラを介してタスクを実行しています。数分間実行されます。実行時間が長すぎるためにシャットダウンされていると考える理由はありませんが、代わりにワーカースレッドにする必要があるかどうか疑問に思っています。

ワーカースレッドで clojure プロセスを開始するにはどうすればよいですか? ProcFile とスケジューラ コマンドを微調整するのと同じくらい簡単ですか?

私のProcFile:

web: lein with-profile production トランポリン run -m webhook.server

My App: - 1 時間に 1 回、別のサーバーへのスケジュールされた Web サービス呼び出しを介して Heroku db にデータをフェッチします。- オンデマンドで、リングベースの Web サービスが JSON データを Web 上の別のプロセスに提供します。

4

1 に答える 1

1

普通の古い Java スレッドを開始する Heroku "Worker" dyno を作成できるようです。たとえば、-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 スケジューリング ライブラリの 1 つ(つまり Quartzite) を使用します。私の例は、Heroku ワーカー dyno での同時実行性を証明する非常に単純な (単純な?) 例です。

詳細については、https: //groups.google.com/forum/# !topic/clojure/xQs6MqD3680 を参照してください。

また、単一の Heroku dyno で複数のスレッドを実行することに関するブログ投稿や記事をかなり見つけ ました。dyno あたり 255 スレッド程度に制限されます。

更新上記の概念実証を作成しました。

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

于 2013-07-21T16:23:59.247 に答える