getResult原理リクエストからPHP並列処理を作成する
P粉649990163
P粉649990163 2023-09-14 19:30:46
0
1
555

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

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

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

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

P粉649990163
P粉649990163

全員に返信(1)
P粉211273535

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

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

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

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

を使用できます

  • Symfony プロセス
  • Symfony メッセンジャー
いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート