Celery Next Steps
在应用中使用Celery
项目布局
|
|
|
Python Redis clientgreenlet task 任务模型crontab一样定期重复执行pip
|
安装并自动启动数据库 SQLite/Redis
|
除了标准库依赖外, 只需要 redis
|
如果你的任务是 IO密集型 而不是 CPU密集型 参考IO/CPU bound, 那么可以考虑使用 greenlet 工作类型.
|
使用 git 安装最新版本
|
使用huey需要注意以下3点
the produces(s) : i.e. web应用 the consumer(s) queue : e.g. Redis
如图所示的这三个进程
左侧是生产者, 右上是消费者, 右下是队列
建议代码目录结构
|
首先是配置你的任务队列. 消费者需要一个指明所用后端Huey实例
|
huey对象封装了队列, 而这个队列用来负责存储和收取信息, 你的应用代码中的huey实例使用了后端来协调函数调用.
|
上述例子说明了实现消费者的最简方法, 通过装饰器. 当count_beans被 main调用时, 只要enqueueing完成对函数的调用后会立即返回,而不是等待count_beans的执行结果,无论count_beans是否有耗时操作.
我们的主执行程序很简单, 只需要导入配置和任务即可. 这是为了确保当我们在通过指向配置运行consumer时, 任务也被导入并加载到了内存中.
|
main.huey表示 main.py 中导入 的 huey 实例from config import huey as mmhuey, 则运行脚本是 huey_consumer.py main.mmhuey
|
上述任务描述了 只发不收 的场景, 但是如果你需要任务的返回结果呢? 为了获取结果, 你只需要在你的任务中返回即可.
注意: 存储结果会浪费大量空间, 如果结果不是必须, 请返回为 None, 或者在
Huey实例中设置result_store=False
|
|
需要在 main 中调用时, 启用 schedule 来实现
|
直接在 tasks 中使用装饰器
|
使用 crontab 来实现.
|
取消单个实例
|
取消给定任务的所有实例
|
|
停止一次
|
停止到直到某个时间
|
永远停止
|
随时恢复
|
HOT Redis是redis-py的封装库. 它不需要使用Redis_指令直接操作客户端. 它模拟了python内置的如lists, dicts, sets等数据类型, 以及Queue, threading和collections等模块提供的标准库类复杂结构类型, 只需要操作这些类型便可以进行redis操作这些类型都由 Redis 支持, 可以在网络上进行
原子操作– 关于对象的原子操作是HOT redis一个核心功能, 而这些都是由在 Redis 内部运行的Lua_脚本来提供支持, 用于确保原子操作正常工作.
| 操作 | 平均情况 | 最坏情况 |
|---|---|---|
| copy | O(n) | O(n) |
| append | O(1) | O(1) |
| insert | O(n) | O(n) |
| 取元素 list[i] | O(1) | O(1) |
| 修改元素 | O(1) | O(1) |
| 删除元素 | O(n) | O(n) |
| 遍历 | O(n) | O(n) |
| 取切片 | O(k) | O(k) |
| 删除切片 | O(n) | O(n) |
| 修改切片 | O(n+k) | O(n+k) |
| extend | O(k) | O(k) |
| 排序 | O(n log n) | O(n log n) |
| 列表乘法 | O(nk) | O(nk) |
| x in s | O(n) | |
| min(s), max(s) | O(n) | |
| 计算长度 | O(1) |