2

時には、多くのメールを送信する必要があります。ユーザーを 100 人ずつ選択しています。ユーザーごとにメールを作成し、送信 (スプールに追加) し、作成し$em->clear()ます。しかし、本番環境でも 4000 通を超えるメールを送信することはできません。「メモリを割り当てられません」というメッセージが表示されます。

それを行う適切な方法は何ですか?コマンドの最後に引数を追加し、--skip=4000?を使用して何度も実行します。

4

2 に答える 2

2

私たちがしていることは、それをスレッド化することです...つまり、ユーザーのテーブルがあり、IDとEMAIL列があるとします。1、2などで終わるIDよりも、0で終わるIDの数が多かれ少なかれ等しいと想定します。

これで、メールを送信するスクリプトは、たとえばゼロで終わる人にのみメールを送信し、idフィールドが1で終わる人にメールを送信する別のスクリプトなどがあります。たとえば、パラメータを使用してこれを定義します。たとえば、スクリプトは次のようになります。 「send-a-lot.php」と呼ばれる、次の10個のコマンドを実行します。

php send-a-lot.php --ending-on=0
php send-a-lot.php --ending-on=1
php send-a-lot.php --ending-on=2
php send-a-lot.php --ending-on=3
php send-a-lot.php --ending-on=4
php send-a-lot.php --ending-on=5
php send-a-lot.php --ending-on=6
php send-a-lot.php --ending-on=7
php send-a-lot.php --ending-on=8
php send-a-lot.php --ending-on=9

コード内で、次のようなことをしたいとします。

if ($id % 10 == $endingOnParameter) {
  // send the mail
}

それはあなたが求めていたものではありませんが、少なくともそれは私たちの負荷問題の「一部」を助けるために私たちがしたことです

于 2012-01-19T09:56:21.580 に答える
2

私は自分の経験に言及します: リソースが非常に限られている共有サーバーで、symfony と SwiftMailer を使用して約 8000 通の個人メールを送信しています。ユーザーのテーブルがあり、ページ分割されたクエリを作成するタスクまたはコマンドを作成し、タスクのパラメーターを介してページサイズを渡しました。Y は 30 分ごとに cron ジョブでこのタスクまたはコマンドを実行しました。リソースに応じて構成できます。クエリ ページ サイズを使用して送信するメールの数を管理し、cron ジョブを使用してロット間の時間を管理できます。より専門的で堅牢なソリューションがあることは認めますが、リソースが限られている共有サーバーで見つけた唯一の方法はこれでした.

于 2012-01-19T21:53:22.403 に答える