【问题标题】:Django - Is there a better way to send bulk Twilio text messages?Django - 有没有更好的方法来发送批量 Twilio 短信?
【发布时间】:2020-03-09 06:37:10
【问题描述】:

我目前正在使用以下 views.py 函数 sendsmss 允许用户在用户完成带有他们的短信的 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 中有没有更好的方法来做到这一点?

【问题讨论】:

  • 您可以使用类似django-rq的方式使用作业队列

标签: python django django-views twilio twilio-api


【解决方案1】:

这些问题非常主观,我将尝试相应地回答:

如果有 100 或 1000 名订阅者,这需要多长时间

这完全取决于 Twilio 的性能。 API 客户端正在使用请求库,它正在为每个订阅者一一创建消息。在理想情况下,所花费的时间似乎与订阅者的数量成正比。

如果需要很长时间,那么用户会在重定向到主页之前等待任务完成吗?

根据您当前的实施,是的。 return redirect('homepage') 只有在消息发送给所有订阅者后才会执行。万一出现错误,页面将不会重定向到主页。

在 Django 中有没有更好的方法来做到这一点?

是的,有。您可以使用异步作业队列,例如celery 并将其与 django 连接起来。在这种情况下,您可以在 celery 中启动异步任务并立即向用户返回响应。您还可以选择向用户显示正在运行的 celery 任务的进度(如果需要)。

【讨论】:

  • 谢谢。一旦我学会了 celery,实现起来就相对容易了。是否值得花时间为这个单一用例实施?我知道我的问题(包括这个问题)非常主观,但请告诉我您的想法。
  • 我想如果你想让用户有一个好的用户体验,那就是工作检出。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多