使用Celery实现发送短信的异步任务

Celery的介绍及使用场景:

        celery适用异步处理问题,当发送邮件、或者文件上传, 图像处理等等一些比较耗时的操作,我们可将其异步执行,这样用户不需要等待很久,提高用户体验.

        我们在做网站后端程序开发时,会碰到这样的需求:用户需要在我们的网站填写注册信息,我们发给用户一封注册激活邮件到用户邮箱,如果由于各种原因,这封邮件发送所需时间较长,那么客户端将会等待很久,造成不好的用户体验.

        我们将耗时任务放到后台异步执行。不会影响用户其他操作。除了注册功能,例如上传,图形处理等等耗时的任务,都可以按照这种思路来解决。 如何实现异步执行任务呢?我们可使用celery. celery除了刚才所涉及到的异步执行任务之外,还可以实现定时处理某些任务。     

          celery通过消息进行通信,通常使用一个叫Broker(中间人)来协client(任务的发出者)和worker(任务的处理者). clients发出消息到队列中,broker将队列中的信息派发给worker来处理。

  一个celery系统可以包含很多的worker和broker,可增强横向扩展性和高可用性能。

开始我们的业务:

1. 在我们的项目同名目录文件下创建一个celery_tasks的包用于保存celery异步任务。

2. 在celery_tasks目录下创建sms目录,用于放置发送短信的异步任务相关代码。

3. 将提供的发送短信的<云通讯SDK>放到celery_tasks/sms/目录下。

4. 在celery_tasks/sms/目录下创建tasks.py文件,用于保存发送短信的异步任务
        (坑点: 记得要加 @ celery_app.task(name="send_sms_code") 这个装饰器
        name="send_sms_code" 这个名字最好指定,;要不然他会把整个包的路径当做任务名字, 使结构复杂化;
)  ;

5. 在celery_tasks目录下创建config.py文件,用于保存celery的配置信息.(ip地址根据自己公司而定)

        broker_url = "redis://127.0.0.1/15"

6. 在celery_tasks目录下创建main.py文件,用于作为celery的启动文件:

(忽略celery_tasks.email, celery_tasks.html)这是别的异步任务;)

7. 在验证短信的视图函数中view.py 文件改写SMSCodeView这个类,使用celery异步任务发送短信;

启动celery框架:

在确保目录下有 celery_tasks 这个包时:

celery -A celery_tasks.main worker -l info   默认是以多进程的方式进行工作的 

在开启celery之后:

猜你喜欢

转载自blog.csdn.net/bin_1022/article/details/81178646