2016-08-22 2 views
0

Ich verwende rq scheduler. Ich möchte Nutzer daran erinnern, ihre E-Mails nach 2 Minuten und 10 Minuten zu bestätigen. Also benutze ich post_save Signal, um diese Aufgaben zu planen. Ich habe Aufgabe wie folgt aufgebaut:Django rq Scheduler kann dieselbe Aufgabe nicht zweimal in die Warteschlange stellen

from datetime import timedelta 
import django_rq 
def send_verification_email(user): 
"""Remind signed up user to verify email.""" 

    if not user.is_email_verified: 
     context = get_email_context(user) 
     context['first_name'] = user.first_name 
     context['url'] = django_settings.ACTIVATION_URL.format(**context) 
     # below line sends email 
     VerifyEmailReminderNotification(user.email, context=context).send() 

@receiver(post_save) 
def remind_to_verify_email(sender, created, instance, **kwargs): 
    """Send verify email for the new user.""" 
    list_of_models = ('Person', 'Company') 
    scheduler = django_rq.get_scheduler("default") 
    if sender.__name__ in list_of_models: 
     if created: 
      scheduler.enqueue_in(timedelta(minutes=2), send_verification_email, instance) 
      # if I move below enqueue to "send_verification_email" method it will go to recursion. 
      scheduler.enqueue_in(timedelta(minutes=10), send_verification_email, instance) 

Problem ist: Ich eine Mail nach 2 Minuten immer bin aber nicht zweite Mail nach 10 Minuten. Jede Hilfe wird geschätzt.

Antwort

1

Führen Sie die erste Aufgabe mit Delta 2 Minuten und wenn es ausgeführt wird, sollte es eine andere mit Delta 8 Minuten ausführen. Ich hoffe, das hilft.

+0

Danke, aber was auch immer Delta für die zweite Aufgabe eingestellt ist es führt nicht die Funktion, die es soll. P. Ich wartete 15 Minuten für die zweite Mail immer noch nicht da. – Kishan

+0

Ja, ich verstehe, ich gebe Ihnen nur eine andere Option, um das gleiche Ergebnis zu erzielen, ohne zu überlegen, warum, wenn Sie Aufgaben gleichzeitig ausführen, nicht ausgeführt wird. – turkus

+0

Oh okay. hab ich meinen du solltest meine zweite "scheduler.enqueue" in meine send_verification_mail Methode schreiben! Ich werde das versuchen Danke. – Kishan

Verwandte Themen