ホームページ  >  記事  >  バックエンド開発  >  1 秒間一時停止した後、データの読み取りを続行します

1 秒間一時停止した後、データの読み取りを続行します

WBOY
WBOY転載
2024-02-11 08:27:08379ブラウズ

1 秒間一時停止した後、データの読み取りを続行します

php Editor Banana が、「1 秒間停止した後、データの読み取りを続ける」という興味深いトリックを紹介します。プログラミングでは、後続の操作を続行する前に一定時間待機する必要がある場合があります。このテクニックは、この目標を達成するのに役立ちます。ネットワーク要求の遅延操作に使用する場合でも、時間のかかる特定の操作がプログラムの実行効率に影響を与えるのを避けるために使用する場合でも、この技術は重要な役割を果たします。以下では、この関数をphpで実装する方法を詳しく紹介します。

質問内容

curlを使用してエンドポイントからデータを取得し、プログラムに転送しています。プログラムのメイン関数は次のようなデータを読み取ります

リーリー

ここまではすべて正常です。ただし、私の最終目標は、このようにエンドポイントを一定期間繰り返しカールして、プログラムが N 時間間隔で到着する N 個の JSON BLOB を読み取るようにすることです。

リーリー

エンドポイントにカールするたびに、同じ構造化データに到達します。したがって、データ読み取りコードを関数 readStdIn に移動する必要があります。この関数は、curl がデータの送信を停止するまで繰り返し呼び出します。また、プログラムが json データを受信するたびに、構造体にアンマーシャリングしてスライスに追加します。 readStdIn を繰り返し呼び出すには for ループを使用し、readStdIn のデータを読み取るには for ループも使用しました。 readStdIn 関数は完了しません。なぜだめですか?

メイン機能

リーリー

readStdIn 関数

reader := bufio.NewReader(os.Stdin)
var buf bytes.Buffer
line, err := reader.ReadString(`\n`)
for {
  if err != nil{
     buf.WriteString(line)
     break
   }
  buf.WriteString(line)
}
var data Memstats
err = json.Unmarshal(buf.Bytes(), &data)

ソリューション

JSON の解析用

スキャナーは、機能をカスタマイズしたり、bash スクリプトを変更したりすることで使用することもできます。しかし、どちらも以下のコードよりも複雑だと思います。

リーリー リーリー

改行区切りデータの場合

リーリー

これは、新しいプログラム インスタンス (例のように) の作成と通常のパイプの使用の両方で機能します。

同じパイプを使用します

リーリー

出力:

リーリー

異なるパイプを使用します (毎回新しいインスタンス)

while sleep 1; do echo "$(date)" | ./my Program; complete 出力:

リーリー

以上が1 秒間一時停止した後、データの読み取りを続行しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。