celery使用redis 给获取任务结果设置过期时间
时间: 2023-08-07 18:03:57 浏览: 89
在 Celery 中,可以使用 Redis 作为消息代理,存储任务的返回值。如果想给获取任务结果设置过期时间,可以在创建任务时,设置 `expires` 参数为一个时间间隔。例如:
```python
from datetime import timedelta
from celery import Celery
app = Celery('tasks', broker='redis://localhost:6379/0')
@app.task(expires=3600) # 设置过期时间为 1 小时
def add(x, y):
return x + y
```
在上面的例子中,`expires=3600` 指定了任务结果的过期时间为 1 小时。这意味着,如果任务的返回值在 1 小时内没有被取走,它将被自动删除。注意,这里的时间间隔是一个整数,单位是秒。
如果想给特定的任务结果设置过期时间,可以在获取任务结果时,使用 Redis 的 `EXPIRE` 命令设置键的过期时间。例如:
```python
import redis
from celery.result import AsyncResult
# 创建 Redis 客户端
redis_client = redis.Redis()
# 获取任务结果
result = AsyncResult(task_id)
# 获取任务结果的值
value = result.get()
# 设置任务结果的过期时间为 1 小时
redis_client.expire(result.id, 3600)
# 返回任务结果
return value
```
在上面的例子中,`redis_client.expire(result.id, 3600)` 使用 `EXPIRE` 命令给任务结果的键设置过期时间为 1 小时。注意,这里的时间间隔是一个整数,单位是秒。