Django - Есть ли лучший способ отправки массовых текстовых сообщений Twilio? - PullRequest
0 голосов
/ 09 марта 2020

В настоящее время я использую следующую функцию views.py sendmss , чтобы позволить пользователю отправлять смс-сообщения в свой список подписчиков после того, как пользователь заполнил форму html с помощью смс они хотят отправить своим подписчикам:

def sendsmss(request):
    if request.method == "POST":
        subscribers = Subscriber.objects.all()

        sms = request.POST['sms']

        mytwilionum = "+13421234567"

        ACCOUNT_SID = TWILIO_ACCOUNT_SID
        AUTH_TOKEN = TWILIO_AUTH_TOKEN
        client = Client(ACCOUNT_SID, AUTH_TOKEN)

        for subscriber in subscribers:
            subscriber_num = subscriber.phone_number
            client.messages.create(
                to= subscriber_num,
                from_=mytwilionum,
                body=sms
            )

        return redirect('homepage')

Эта функция работает, но я только протестировал массовую отправку с 3 подписчиками. Если бы это было 100 или 1000 подписчиков, сколько времени это займет ... если это займет много времени, то будет ли пользователь ждать завершения задачи до того, как произойдет перенаправление на домашнюю страницу? Есть ли лучший способ сделать это в Django?

1 Ответ

1 голос
/ 09 марта 2020

Вопросы очень субъективны, и я постараюсь ответить на них соответственно:

Если бы было 100 или 1000 подписчиков, сколько времени это займет

Это полностью зависит от производительности Twilio. Клиент API использует библиотеку запросов и создает сообщения по одному для каждого подписчика. В идеальном случае отнимаемое время кажется пропорциональным количеству подписчиков.

если это займет много времени, то будет ли пользователь ждать завершения задачи, прежде чем произойдет перенаправление на домашнюю страницу?

Исходя из вашей текущей реализации, да. return redirect('homepage') будет выполнено только после того, как сообщение будет отправлено всем подписчикам. В случае ошибки, она будет выдана, и страница не будет перенаправлена ​​на домашнюю страницу.

Есть ли лучший способ сделать это в Django?

Да, есть. Вы можете использовать асинхронную очередь заданий, например, сельдерей и подключить ее к django. В этом вы можете запустить задачу asyn c в сельдерее и немедленно вернуть ответ пользователю. Вы также можете выбрать отображение хода выполнения задачи сельдерея пользователю (при необходимости).

...