これはばかげた質問であるならば、私は謝罪し、恥で私の頭を隠して行くだろう、しかし:パイソン/ RQ - 監視員の状況
私はPythonでジョブをキューにRQを使用しています。私はこのように動作します:
- ジョブAが起動します。ジョブAは、Web APIを介してデータを取得し、それを保存します。
- ジョブAが実行されます。
- ジョブAが完了しました。
- Aが完了すると、ジョブBが開始します。ジョブBは、ジョブAによって保存された各レコードをチェックし、追加の応答データを追加します。
- ジョブBが完了すると、ユーザーはレポートの準備完了を知らせる幸せな電子メールを受け取ります。これまで
マイコード:
redis_conn = Redis()
use_connection(redis_conn)
q = Queue('normal', connection=redis_conn) # this is terrible, I know - fixing later
w = Worker(q)
job = q.enqueue(getlinksmod.lsGet, theURL,total,domainid)
w.work()
私は、とき仕事私の最善の解決策は、ジョブAを監視することができる2、労働者、ジョブA用とBの1ジョブBの労働者を持っていることだったと仮定し、 Aが完了したら、仕事Bで仕事を始めてください。
私の人生を救うことができないのは、私がどのようにして別の労働者のステータスを監視するかです。 job.idでジョブAからジョブIDを取得できます。私はw.nameでワーカー名をつかむことができます。しかし、私がどのようにその情報を他の労働者にどのように渡すかについて最も控えめではない。
または、これを行うためのもっと簡単な方法がありますか?完全に欠落していますか?
ジョブAが完了するまでジョブBを実行できない場合(つまり、並列実行できないことを意味する)、なぜrqを使用するのですか?順番に処理する(アプリケーションをブロックしたくない場合は別のスレッドまたはプロセスで) –
AとBのジョブはそれぞれ非常に時間がかかり、別々に発生する可能性があります多くの仕事をAのジョブとは独立したものにしてください。それが難しいとすれば、私は降伏するかもしれません。 – user1066609
一緒に行くAとBのペアがありますか、あるいはBはどんなAにも依存できますか?後者の場合、同期化の問題が1つあります。 :-) –