1、需求:
需要把一部分代码改为异步执行。
网站在记录访客IP,然后通过调用第三方API获取IP相关信息,最后将IP和信息一起保存下来,再响应客户端。其中第三方API调用频率有限制。1s不能超过5次,于是中间有个time.sleep。原本这3个步骤是同步执行,每次都在sleep这一步阻塞,拖慢了网页的响应速度。
所以现在把日志记录这一块拆出来,改为异步执行:日志记录sleep的时候,可以继续执行其他的IO。
参考:异步任务队列Celery在Django中的使用 - zni.feng - 博客园
(这篇文章思路看起来很清晰,但照做报错,按照搜到的办法也解决不了,后来才发现是版本不匹配:它是Celery3.x+ Django-celery,对应Django 1.8--;Django 1.8++应当对应Celery 4.x,且已经自动集成Django-celery。变化很大,不能参考。)
这里一个提醒是:解决问题一定要检查版本,最好还是参考官网!
这是官方示例:
celery/celerygithub.com我的环境: Django2.1 + Celery 4.2.1。
2、安装(最简单)
pip install celery
官网示例的requirements:
# https://github.com/celery/celery/blob/master/examples/django/requirements.txt
django>=1.9.8
sqlalchemy>=1.0.14
celery>=4.0
有说装rabbitmq-server 做消息队列,装了但好像目前没用上:
sudo apt-get