API 中的异步调用在 Django 中进行
Async call in API made in Django
我正在使用 DRF 和 Twilio SMS 发送服务。我在某些对象保存上添加了此代码 - 我在某些 API 调用中这样做。但正如我所看到的,Django 等待 Twilio 代码被执行(这可能等待响应)并且它需要大约 1-2 秒才能从 Twilio 服务器获得响应。
我想优化我的 API,但我不确定应该如何异步发送 Twilio SMS 请求。这是我的代码。
def send_sms_registration(sender, instance, **kwargs):
start = int(round(time.time() * 1000))
if not instance.ignore_sms:
client = TwilioRestClient(TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN)
activation_code = instance.activation_code
client.messages.create(
to = instance.phone_number,
from_ = DEFAULT_SMS_NAME,
body = SMS_REGISTRATION_TEXT + activation_code,
)
end = int(round(time.time() * 1000))
print("send_sms_registration")
print(end - start)
post_save.connect(send_sms_registration, sender=Person, dispatch_uid="send_sms_registration")
感谢您的建议!
API调用不是异步的,您需要使用其他方法来异步发送短信,您可以使用以下任何一种:
- django-background-tasks:简单,不需要工人
- python-rq:非常适合简单的异步任务
- celery:更完整的解决方案
我正在使用 DRF 和 Twilio SMS 发送服务。我在某些对象保存上添加了此代码 - 我在某些 API 调用中这样做。但正如我所看到的,Django 等待 Twilio 代码被执行(这可能等待响应)并且它需要大约 1-2 秒才能从 Twilio 服务器获得响应。
我想优化我的 API,但我不确定应该如何异步发送 Twilio SMS 请求。这是我的代码。
def send_sms_registration(sender, instance, **kwargs):
start = int(round(time.time() * 1000))
if not instance.ignore_sms:
client = TwilioRestClient(TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN)
activation_code = instance.activation_code
client.messages.create(
to = instance.phone_number,
from_ = DEFAULT_SMS_NAME,
body = SMS_REGISTRATION_TEXT + activation_code,
)
end = int(round(time.time() * 1000))
print("send_sms_registration")
print(end - start)
post_save.connect(send_sms_registration, sender=Person, dispatch_uid="send_sms_registration")
感谢您的建议!
API调用不是异步的,您需要使用其他方法来异步发送短信,您可以使用以下任何一种:
- django-background-tasks:简单,不需要工人
- python-rq:非常适合简单的异步任务
- celery:更完整的解决方案