Python 3.x 如何缓存芹菜应用程序处理的结果

Python 3.x 如何缓存芹菜应用程序处理的结果,python-3.x,caching,redis,celery,Python 3.x,Caching,Redis,Celery,我想知道是否可以缓存发送到芹菜应用程序的结果。例如,假设我有一个基本的芹菜应用程序,它看起来像: tasks.py import os from celery import Celery import time redis_url = 'redis://localhost:6379' app = Celery('tasks', backend=redis_url, broker=redis_url) @app.task def add(x, y): time.sleep(10) #

我想知道是否可以缓存发送到
芹菜
应用程序的结果。例如,假设我有一个基本的芹菜应用程序,它看起来像:

tasks.py

import os
from celery import Celery
import time

redis_url = 'redis://localhost:6379'
app = Celery('tasks', backend=redis_url, broker=redis_url)

@app.task
def add(x, y):
    time.sleep(10) # Added to see whether caching occurs.
    return x + y
如果我使用与此处相同的参数调用函数
add
两次:

from tasks import add

add.delay(10, 10)
add.delay(10, 10)

第二个参数的计算速度会更快吗?可能是因为输入输出对
((10,10),20)
在结果后端中已经可用?如果没有,我如何实现这种行为?

任何调用
add.delay(10,10)
都应该进行缓存(memoize)…谢谢Dejan。是否可以将结果后端配置为缓存。既然redis已经是一个基于LRU的缓存,我可以使用它吗?据我所知不是这样。没有任何东西可以保证使用相同的参数调用函数会返回相同的结果。像D(dlang.org)这样的语言有函数纯度的概念,可以进行Python中的优化。。。Python可能永远无法保证这一点。无论调用什么
add.delay(10,10)
都应该进行缓存(memoize)…谢谢Dejan。是否可以将结果后端配置为缓存。既然redis已经是一个基于LRU的缓存,我可以使用它吗?据我所知不是这样。没有任何东西可以保证使用相同的参数调用函数会返回相同的结果。像D(dlang.org)这样的语言有函数纯度的概念,可以进行Python中的优化。。。Python可能永远无法保证这一点。