中间人Brokers
- Celery 需要一个发送和接收消息的解决方案,其通常以独立服务形式出现, 称为 消息中间人 。
运行 Celery 职程服务器:职程作为守护程序在后台运行
$ celery -A tasks worker --loglevel=info
调用任务
delay()
apply_async()
- 这个任务已经由之前启动的职程执行,并且你可以查看职程的控制台输出来验证。
- 调用任务会返回一个 AsyncResult 实例,可用于检查任务的状态,等待任务完成或获取返回值(如果任务失败,则为异常和回溯)
- Apply tasks asynchronously by sending a message. 在程序的运行过程中,我们经常会碰到一些耗时耗资源的操作,为了避免它们阻塞主程序的运行,我们经常会采用多线程或异步任务。
- **result.ready()**任务完成时为true,用result.get()取结果
- 可以根据task id直接获取相关task的AsyncResult: AsyncResult(task_id=XXX)
保存结果 Backend
- Celery 需要在某个地方存储或发送这些状态。可以从内建的几个结果后端选择:
- SQLAlchemy/Django ORM
- Memcached
- Redis
- AMQP( RabbitMQ )
- MongoDB
- 自制
- 后端通过 Celery 的 backend 参数来指定
app = Celery('tasks', backend='redis://localhost', broker='amqp://')