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)
スキャナーは、機能をカスタマイズしたり、bash スクリプトを変更したりすることで使用することもできます。しかし、どちらも以下のコードよりも複雑だと思います。
リーリー リーリーこれは、新しいプログラム インスタンス (例のように) の作成と通常のパイプの使用の両方で機能します。
出力:
リーリーwhile sleep 1; do echo "$(date)" | ./my Program; complete
出力:
以上が1 秒間一時停止した後、データの読み取りを続行しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。