Django - 是否有更好的方式发送大量 Twilio 短信?
Django - Is there a better way to send bulk Twilio text messages?
我目前正在使用以下 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 中有更好的方法吗?
这些问题非常主观,我会尝试相应地回答这些问题:
If there were 100s or 1000s of subscribers how long would this take
这完全取决于 Twilio 的性能。 API 客户端正在使用请求库,它正在为每个订阅者一条一条地创建消息。在理想情况下,花费的时间似乎与订阅者数量成正比。
if it takes long then would user be waiting for task to complete before redirect to homepage happens?
根据您当前的实施,是的。 return redirect('homepage')
只有在消息发送给所有订阅者后才会执行。万一出现错误,将被抛出并且页面不会重定向到主页。
Is there a better way to do this in Django?
是的,有。您可以使用异步作业队列,例如celery and hook it up with django。在此,您可以在 celery 中启动异步任务,并 return 立即响应用户。您还可以选择向用户显示 运行 celery 任务的进度(如果需要)。
我目前正在使用以下 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 中有更好的方法吗?
这些问题非常主观,我会尝试相应地回答这些问题:
If there were 100s or 1000s of subscribers how long would this take
这完全取决于 Twilio 的性能。 API 客户端正在使用请求库,它正在为每个订阅者一条一条地创建消息。在理想情况下,花费的时间似乎与订阅者数量成正比。
if it takes long then would user be waiting for task to complete before redirect to homepage happens?
根据您当前的实施,是的。 return redirect('homepage')
只有在消息发送给所有订阅者后才会执行。万一出现错误,将被抛出并且页面不会重定向到主页。
Is there a better way to do this in Django?
是的,有。您可以使用异步作业队列,例如celery and hook it up with django。在此,您可以在 celery 中启动异步任务,并 return 立即响应用户。您还可以选择向用户显示 运行 celery 任务的进度(如果需要)。