2011-01-10 4 views
2

私はdjango_notificationモジュールを使用しています。 https://github.com/pinax/django-notification/blob/master/docs/usage.txt私はこのDjangoのドキュメントを理解していません。どのように私はこのモジュールを使用するのですか?

これは、何かが起こるとき、私は、ユーザーに電子メールを送信するために私のコードで何をすべきかです:

notification.send([to_user], "comment_received", noti_dict) 

をしかし、これは要求をブロックしているようです。そして、それを送るには長い時間がかかります。私はドキュメントを読んで、それをキュー(非同期)に追加することができると言います。非同期キューに追加するにはどうすればよいですか?

私は、ドキュメントが何を言おうとしているのか分かりません。 "emit_notices"とは何ですか?それはいつ呼びますか?私はそれを5秒ごとに呼び出すスクリプトを持っていますか?それは愚かです。それを非同期的に行う正しい方法は何ですか?私は何をしますか?

Lets first break down what each does. 

``send_now`` 
~~~~~~~~~~~~ 

This is a blocking call that will check each user for elgibility of the 
notice and actually peform the send. 

``queue`` 
~~~~~~~~~ 

This is a non-blocking call that will queue the call to ``send_now`` to 
be executed at a later time. To later execute the call you need to use 
the ``emit_notices`` management command. 

``send`` 
~~~~~~~~ 

A proxy around ``send_now`` and ``queue``. It gets its behavior from a global 
setting named ``NOTIFICATION_QUEUE_ALL``. By default it is ``False``. This 
setting is meant to help control whether you want to queue any call to 
``send``. 

``send`` also accepts ``now`` and ``queue`` keyword arguments. By default 
each option is set to ``False`` to honor the global setting which is ``False``. 
This enables you to override on a per call basis whether it should call 
``send_now`` or ``queue``. 

答えて

2

は、あなたが

NOTIFICATION_QUEUE_ALL=True 

を設定する必要があります。そして、あなたはセットアップにcronジョブ(多分ごとに10〜30秒か何か)のようなものを実行するために必要なファイル

django_admin.py emit_notices 

これは定期的に実行され、すべての電子メールを送信するブロッキングコールを行い、通知アプリケーションに必要なすべての訓練を行います。何もしなければそれが仕事量の激しいことではないと確信しています。

あなたがこのことについてあなたのコメントを展開する前に、あなたはそれについて考えるべきです。それはまったくばかげたことではありません。 ブロッキング呼び出しをWeb要求に結びつけたくない場合、ユーザーはサーバーから応答を返すことはありません。この意味で電子メールの送信はブロックされています。

ここで、ログイン時にこの通知を受け取るようにした場合は、sendmailなどの外部の通話を使用する必要があるため、この方法を使用する必要はありません電子メールを送信する。しかし、あなたのケースでは、電子メールを送信すると、このようにする必要があります。

1

これらのドキュメントによると、sendはちょうどsend_nowqueueをラップしています。

  1. 変更して設定:

    # This flag will make all messages default to async 
    NOTIFICATION_QUEUE_ALL = True 
    
  2. 使用tehのqueueキーワード引数:

    notification.send([to_user], "comment_received", noti_dict, queue=True) 
    
ですから、非同期代わりに、同期の通知を送信したい場合には、2つのオプションを持っています

通知をキューに入れる場合は、を実行する必要があります定期的に管理コマンドを発行してください。だから、あなたはそれを1分ごとに実行するcronジョブに入れることができます。それはあなたの設定のように見えます

関連する問題