2016-05-26 19 views
3

私は大きなデータセットと電子メールの結果を処理するShinyサーバーに取り組んでいます。結果を計算して郵送するコードを書いていますが、受信した順に各送信を処理するキューイングシステムを実装したいと考えています。R光沢のあるキュー

私はここで説明するキューのクラスを利用する予定の:http://www.r-bloggers.com/implementing-a-queue-as-a-reference-class/

現在私たちの流れは次のように動作します。

  1. 人になる入力CSVファイルとその電子メール私たちの光沢のあるアプリの中へ。
  2. startServerファイルは送信ボタンを監視し、plottingメソッド(plotting.R)を呼び出します。このメソッドはデータをPNGとしてプロットし、ファイル名を返します。
  3. 返されたファイル名と電子メールは、shinyServerによってデータをメール送信するmailingメソッド(mail.R)に渡されます。

注:メールとプロットの呼び出しは、「local = TRUE」に設定されていないため、グローバル環境にあります。

私の考えはにある:

  1. StartServerメソッドの外で、まだserver.Rでキューオブジェクト(q)を宣言し、$プッシュ(inputtedData、電子メール)のqを呼び出します。
  2. そこから、キューオブジェクトはファイルを計算してクライアントに送信するための呼び出しを行い、次のジョブに移動する前に各ジョブが完了するまで待機します。

問題は、私はキュー構造上に新しいデータをプッシュする非同期呼び出しを受け入れるためにキューファイルを許可するかどうかはわかりませんということです。 startServerはセッションごとの環境であると見なしますが、共有キューを実装する際に考慮する必要があります。私は参考のために使用しています

リンク:事前に https://gist.github.com/thesamuel/2450bbee9ef3082e21f68d37b1d40060

おかげで、私は何かを逃した場合、私に知らせてください。

答えて

0

おそらくこれを行う方法があります。確かに、Shinyアプリケーションから非同期コードを呼び出すことができるように設計されたコードがいくつか書かれています。 https://gist.github.com/jcheng5/9504798d93e5c50109f8bbaec5abe372https://gist.github.com/andrewsali/3317e5954459fef2f5fed68d68c1ac92(非同期タスクを実行した後に光沢のある出力を更新するためにリアクティブを使用)とhttps://github.com/alexbbrown/mURL(非同期HTTP、Shiny用に設計されています)を参照してください。これらはいずれも実験的/ PoCコードであり、ソリューションのパッチを当てるのに役立つかもしれませんが、あなたのためにすぐに動作することはまずありません。

ただし、このアプローチを使用しないことをお勧めします。要件は次のようになります。

  1. 要求またはユーザーの入力に応じて実行する時間がかかります。
  2. ジョブが完了する前にユーザーに戻りたいとします。
  3. ウェブページの内容は、ジョブの完了によって異なります。

あなたの場所では、できるだけ簡単な方法で、シャイニーの外部のキューに書き込みます。たとえば、ファイルに追加するか、データベースに行を追加します。光沢のあるインタラクティブ機能は、すぐに続くことができます。シャイニーの外では、ファイル/テーブルから読み込んだ別のプロセスを個別に設定し、毎回メールを送信することができます。

実際、あなたは完全に(そして複雑な)非同期を必要とするのではなく、シャイニーの外で完全に行うことができる電子メールを送信していることは幸いです。

関連する問題