2011-01-10 4 views
2

django_notification 모듈을 사용하고 있습니다. https://github.com/pinax/django-notification/blob/master/docs/usage.txt이 장고 문서를 이해할 수 없습니다. 이 모듈을 어떻게 사용합니까?

이 뭔가 일이 발생했을 때 사용자에게 이메일을 보내 내 코드에서 할 것입니다 :

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 

을 설정해야합니다 그리고 당신은 설정에 cronjob에 (아마도 모든 10~30초 또는 무언가) 같은 것을 실행하는 데 필요한 파일

django_admin.py emit_notices 

정기적으로 실행되며 모든 전자 메일과 알림 응용 프로그램에 필요한 모든 작업을 보내는 차단 호출을 수행합니다. 할 일이 없다면 워크로드가 그렇게 강하지는 않을 것이라고 확신합니다.

그리고이 어리석은 것에 대해 의견을 제시하기 전에 그것에 대해 생각해야합니다. 정말 바보가 아닙니다. 호출을 웹 요청에 연결하지 않으려면 사용자가 서버에서 응답을받지 못합니다. 이메일을 보내는 것이 이런 의미에서 차단됩니다.

로그인 할 때이 알림을 받게하려면, 외부 전화 인 sendmail 또는 사용중인 전화를 사용해야하므로이 방법을 사용하지 않아도됩니다. 이메일을 보냅니다. 그러나 이메일을 보내는 귀하의 경우에는 이렇게해야합니다.

1

그 문서에 따르면, 단지 sendsend_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) 
    
그래서 당신은 비동기 대신 동기의 알림을 보내려면 당신은 두 가지 옵션이 있습니다

알림을 대기열에 올리는 경우을 실행해야합니다.주기적으로 관리 명령. 그래서 당신은 cron 작업에 2 분 간격으로 실행할 수 있습니다. 그것은 당신의 설정에서 보이는

관련 문제