2017-04-13 1 views
0

私は、HerokuでホストされているRubyアプリケーションに遅延ジョブを使用して、最大5分かかる非常に長いタスクを実行しています。 私は、開発モードでは、少なくともこのタスクが実行されているときに、それ以降のタスクが開始されるまで開始されないことに気付きました。私は他のタスクが終了するのを待つことなく(少なくとも3つの並行タスクを持つなど)実行を開始できるようにしたいと思います。 私はHeroku($$$)の労働者の数を増やしたくありません。 私は遅延ジョブの 'プール'パラメータに気がついたが、これが私が必要とするものか、それを使用する方法であるかどうか完全に理解していない。他のタスクを開始する前に、遅延したジョブをタスクを待たないように設定するにはどうしたらいいですか?

https://github.com/collectiveidea/delayed_job/blob/master/README.md

私は、タスクコード内のスレッドを使用して、それを達成したが、多分これはそれを行うための最善の方法ではありません。

遅延ジョブで同時実行性を達成する方法を正確に教えていただけたら、本当に感謝します。

答えて

1

DJワーカーは一度に1つのジョブしか実行しません。バックグラウンドジョブを同時に処理したい場合は、複数のバックグラウンドワーカーが必要です。

sidekiqを実装する方がよいです。

+0

入手しました。プールは何をするのですか? –

+0

@LeticiaEsperon複数のワーカーを実行できます。単一のHeroku dynoでこれを行うことはできますが、プロセスフォークを使用するのでメモリが集中します。 Herokuでのデーモン化の問題を避けるには、[このようなツール](https://github.com/salsify/delayed_job_worker_pool)を使用する必要があります。 – coreyward

+0

@LeticiaEsperon私は、サイドキックが非常に優れた選択肢であり、より良いアーキテクチャをサポートし、まだ無料であり、あなたのコードベースを少し変更するだけで済むことを繰り返し述べたいと思います。著者Mike Perhamも積極的なStackOverflowユーザーであり、Sidekiqに関する質問に頻繁に回答します。ちょうどスイッチを入れて、古いDJとの戦いを止めてください。 – coreyward

関連する問題