0

以下のような task_scheduler ファイルがあります。

    require 'rubygems'
    require 'rufus/scheduler'
      scheduler = Rufus::Scheduler.start_new


   scheduler.cron '0 20 * * *' do

     StartJOb1.perform_async
     Startjob2.perform_async
     Startjob3.perform_async
     Startjob4.perform_async
     Startjob5.perform_async

     end

これらのジョブを分割する必要があり、ジョブ 1、ジョブ 2、およびジョブ 3 が完了した後に Startjob4.perform_async 、 Startjob5.perform_async を実行する必要があります。問題は、これらのジョブを完了するのにかかる時間がわかりません。

これらのバックグラウンド タスクに sidekiq を使用しています

ありがとう

4

3 に答える 3

1

これは Cron では不可能です。おそらく、現在のジョブから次のジョブを呼び出す必要があります。

また、cron を使用しているため、sidekiq は必要ありません。

于 2012-08-30T07:40:09.570 に答える
0

ワーカーの依存関係グラフを定義できるSidekiq Superworkerを使用することもできます。(免責事項として、私は宝石の作者です。)

于 2014-09-18T04:56:28.370 に答える
0

sidekiq を使用したことがないので、これが機能するかどうかはわかりません。レールで呼び出されるセマフォまたはミューテックスを試してみることができます。これに似たもの

mutex1, mutex2, mutex3 = new_mutexes_already_locked
StartJOb1.perform_async(mutex1) #-> unlocks mutex1 as soon as work is finished
Startjob2.perform_async(mutex2) #-> unlocks mutex2 as soon as work is finished
Startjob3.perform_async(mutex3) #-> unlocks mutex3 as soon as work is finished
Startjob4.perform_async(mutex1, mutex2, mutex3) #starts work if mutex1..3 unlocked
Startjob5.perform_async(mutex1, mutex2, mutex3) #dito

Job4+5 を 1 つのメソッドと一緒に開始し、このメソッドがミューテックス 1..3 のロックを取得するのを待機させることもできます。

しかし、これがあなたがしていることに適しているかどうか、そしてMutexが実際に独自のスレッドを並列化するためのsidekiqで機能するかどうかはわかりません(したがって、おそらくプロセスでは機能せず、sidekiqは独自のプロセスで実行されると思います?)。

ミューテックスの代わりに、ジョブの状態をデータベースに書き込み、ジョブ 4 + 5 からポーリングして、いつ完了したかを確認できます。

于 2012-08-30T09:43:45.073 に答える