検索

ホームページ  >  に質問  >  本文

getResult原理リクエストからPHP並列処理を作成する

PHP8/Symfony6 環境で何らかのマルチスレッドを実行したいのですが、次のように動作します:

約 100 万行を処理する原則リクエストを作成しています

これらの行を同時に処理する複数の並列プロセスを作成したいと考えています。 私のリクエストは、doctrine オブジェクトを提供する getResult() 経由で行われます。 オブジェクトの配列をパラメータとしてスレッドを作成する方法はありますか。それでは、「キュー」がデータでいっぱいになるたびにスレッドを作成しますか?

「pthreads」または「popen」に関する情報を見つけましたが、トピックが少し古いため、今でも関連があるかどうかはわかりません

P粉649990163P粉649990163525日前730

全員に返信(1)返信します

  • P粉211273535

    P粉2112735352023-09-15 10:29:17

    この場合、Doctrine が行うことの 1 つは、クラスにデータコンテンツをハイドレートすることです。そのため、数百万のレコードはすべてクラスに変換され、メモリに保持されます。そこで、いくつかの提案があります:

    1. 大規模なクエリでは getResult の使用を避けてください。代わりに、このオブジェクトで何かをしたい場合は、次のようにエンティティ マネージャーをページ分割してクリアしてみてください。
    2. リーリー
      while を使用して直接クエリを実行します:
    1. リーリー

    fetchAll メソッドを使用してすべてのユーザーを一度に取得することもできますが、クエリで返されるユーザーが多すぎるとメモリ不足になる可能性があることに注意してください。上記の while ループを使用すると、一度に 1 ユーザーのみをメモリにフェッチするため、メモリのパフォーマンスが向上します。 リーリー

    誰かがコメントしたように、

    を使用できます

    • Symfony プロセス
    • Symfony メッセンジャー
    • 返事
      0
  • キャンセル返事