解決済み

Ruby 指定時間事にループ処理のコードが不安です

  • すぐに回答を!
  • 質問No.8479697
  • 閲覧数784
  • ありがとう数13
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 40% (2/5)

プログラム暦数日のまだ勉強している学生です。
動作は出来てますが、本当にこれで良いのか不安ですのでアドバイス等あれば宜しくお願いします。

一定時間事(1分)にサイト内データーを巡回するコードを書いてみたのですが、これで宜しいでしょうか?



#########################################
while true

#更新の確認
puts doc.xpath("//span[@class='topdate']").text
#取得
puts doc.xpath('//table[@class="xxxx"]').text
sleep 60

end
#########################################

質問者が選んだベストアンサー

  • 回答No.2

ベストアンサー率 48% (4416/9105)

>処理後に初期化するなり前回のデーターに上書きしていくような方法はありませんでしょうか?

何を??

文脈から見て、「60秒毎の処理に近づける方法は無いか?」という質問だとして回答します。

まず考えつくのは、sleepを1秒にして、現在時刻を調べ、秒が0であれば実行するという方法。
until Time.now.sec==0
sleep 1
end
微妙なタイミングで0秒の所をスキップしてしまう可能性があるため、もうちょっと工夫が必要。

あとは、Rubyの中で繰り返すのはやめて、1回限りの処理にして、OSの機能で1分毎に起動してもらう。
お礼コメント
chibi10sai

お礼率 40% (2/5)

ruby側での処理はスキルを上げる為に御指摘頂いた点を重点に煮詰めていこうと思います。

現時点での対応としてサーバー側にてクローンを実施してみようと思います。

この度はご丁寧に最後まで対応していただいてありがとうございます。
投稿日時 - 2014-02-18 23:38:17

その他の回答 (全1件)

  • 回答No.1

ベストアンサー率 48% (4416/9105)

プログラムは書いたとおりに動くので、「処理をして60秒待ってまた処理を繰り返す」と言うことになります。これは一般的な日本語の意味としての「1分毎に実行」とは違います。
サーバーからの応答が返るのに例えば平均1秒かかるとすると、2回サーバーに問い合わせてるようなので、「約62秒毎の実行」となります。目的によってはこれで十分でしょう。
補足コメント
chibi10sai

お礼率 40% (2/5)

僕の考えてた一定時間ごとにループ処理をするのとは表現方法が違ったのですね(笑)

今回のコードだとサーバーの返り値を考えなければいけないのですね・・・なるほどです。

理解できました。ありがとうございます。

すみませんが追加でなんですが、教えて頂けると助かります。

上記載のコードですとご指摘の「処理をして60秒待ってまた処理を繰り返す」となると実行結果がループされる度に蓄積されていくことのにきずきました。

処理後に初期化するなり前回のデーターに上書きしていくような方法はありませんでしょうか?

宜しくお願いいたします。m(_ _)m
投稿日時 - 2014-02-18 01:55:51
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
関連するQ&A
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,600万件のQ&Aを分析して最適な回答をご提案します。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

ピックアップ

ページ先頭へ