6.16 任务队列Task queues

任务队列 Task queues

任务队列管理常规HTTP请求-相应之外的必须被执行的后台工作。

为什么任务队列必须?

任务通常被异步处理,或者因为它不是被HTTP请求发起,或者它们是在后台长期运行,会显著降低HTTP相应的性能。

比如,一个web应用汇每10分钟pull一次GitHub API,去收集前100个标星的仓库。一个任务队列用来处理这个工作,去调用GitHub API,并把结果存储到持久的数据库里。

另一个例子是当一个数据库查询会在HTTP请求-相应循环里占用太多时间时,查询会每隔一定间隔就在后台被执行,把结果存在数据库中,当HTTP请求来时只要去取预先查询的内容,而不是做那个复杂费时的查询。

其他类型的任务队列包括:

  • 把数据库插入分解到相互独立的数据库操作
  • 每隔一定时间聚合一次数据,比如每隔15分钟
  • 定期执行预处理任务

任务队列项目

Python任务队列的事实标准是Celery。 对于简单应用来说,Celery过于复杂。Celery值得你投入学习。

任务队列云服务

使用任务队列的开源案例

任务队列资源

任务队列学习清单

  1. Pick a slow function in your project that is called during an HTTP request.
  2. Determine if you can precompute the results on a fixed interval instead of during the HTTP request. If so, create a separate function you can call from elsewhere then store the precomputed value in the database.
  3. Read the Celery documentation and the links in the resources section below to understand how the project works.
  4. Install a message broker such as RabbitMQ or Redis and then add Celery to your project. Configure Celery to work with the installed message broker.
  5. Use Celery to invoke the function from step one on a regular basis.
  6. Have the HTTP request function use the precomputed value instead of the slow running code it originally relied upon.

发表评论

电子邮件地址不会被公开。 必填项已用*标注