用django+celery配置MemCachier,需要输入用户名和密码吗?
Configuring MemCachier with django+celery, do I input username and password?
Celery 配置包括 CELERY_RESULT_BACKEND
对 memcached 的支持。来自 the documentation 的例子是:
CELERY_RESULT_BACKEND = 'cache+memcached://127.0.0.1:11211/'
我目前正在尝试配置 celery 以将 memcahed 与我的 MemCachier 缓存一起使用,因此我将其配置如下:
CELERY_RESULT_BACKEND = 'cache+memcached://mc5.dev.ec2.memcachier.com:11211'
其中 mc5.dev.ec2.memcachier.com:11211
是我缓存的 url:port。
问题是,现在当 celery 尝试使用缓存来存储结果时,我收到 invalid username or password
错误:
12:04:29 worker.1 | ClientError: error 9 from memcached_set: (0x2f2a520) invalid username or password, host: mc5.dev.ec2.memcachier.com:11211
我找不到任何包含 memcached 用户名和密码的 celery 后端配置示例,但我尝试将其格式化为:
CELERY_RESULT_BACKEND = 'cache+memcached://<user>:<password>@mc5.dev.ec2.memcachier.com:11211'
并以这个错误结束:
ValueError: invalid literal for int() with base 10: '<password>@mc5.dev.ec2.memcachier.com'
这似乎表明 url 没有被正确解析。有人知道配置芹菜以使用用户名和密码使用 MemCachier 的正确方法吗?
首先,celery 缓存后端将与 pylibmc
或 memcache
模块一起使用,具体取决于可用的模块。您需要确保使用 pylibmc
,因为这是 MemCachier 所支持的。
其次,MemCachier 似乎没有记录身份验证方案。您可能应该阅读 pylibmc 的源代码以了解它是如何处理这个问题的。
我认为您必须通过子类 celery.backends.cache.CacheBackend
来添加身份验证支持。
我终于搞清楚了。诀窍不是通过需要身份验证的 CELERY_RESULT_BACKEND
创建对缓存的新引用,而是使用对您的(已经过身份验证的)django 缓存后端的引用。
换句话说,一旦你开始工作:
In [1]: from django.core.cache import cache
In [2]: cache.set('foo', 'bar')
Out[2]: True
In [3]: cache.get('foo')
Out[3]: 'bar'
celery 后端可以像这样配置使用缓存:
CELERY_RESULT_BACKEND = 'djcelery.backends.cache:CacheBackend'
Celery 配置包括 CELERY_RESULT_BACKEND
对 memcached 的支持。来自 the documentation 的例子是:
CELERY_RESULT_BACKEND = 'cache+memcached://127.0.0.1:11211/'
我目前正在尝试配置 celery 以将 memcahed 与我的 MemCachier 缓存一起使用,因此我将其配置如下:
CELERY_RESULT_BACKEND = 'cache+memcached://mc5.dev.ec2.memcachier.com:11211'
其中 mc5.dev.ec2.memcachier.com:11211
是我缓存的 url:port。
问题是,现在当 celery 尝试使用缓存来存储结果时,我收到 invalid username or password
错误:
12:04:29 worker.1 | ClientError: error 9 from memcached_set: (0x2f2a520) invalid username or password, host: mc5.dev.ec2.memcachier.com:11211
我找不到任何包含 memcached 用户名和密码的 celery 后端配置示例,但我尝试将其格式化为:
CELERY_RESULT_BACKEND = 'cache+memcached://<user>:<password>@mc5.dev.ec2.memcachier.com:11211'
并以这个错误结束:
ValueError: invalid literal for int() with base 10: '<password>@mc5.dev.ec2.memcachier.com'
这似乎表明 url 没有被正确解析。有人知道配置芹菜以使用用户名和密码使用 MemCachier 的正确方法吗?
首先,celery 缓存后端将与 pylibmc
或 memcache
模块一起使用,具体取决于可用的模块。您需要确保使用 pylibmc
,因为这是 MemCachier 所支持的。
其次,MemCachier 似乎没有记录身份验证方案。您可能应该阅读 pylibmc 的源代码以了解它是如何处理这个问题的。
我认为您必须通过子类 celery.backends.cache.CacheBackend
来添加身份验证支持。
我终于搞清楚了。诀窍不是通过需要身份验证的 CELERY_RESULT_BACKEND
创建对缓存的新引用,而是使用对您的(已经过身份验证的)django 缓存后端的引用。
换句话说,一旦你开始工作:
In [1]: from django.core.cache import cache
In [2]: cache.set('foo', 'bar')
Out[2]: True
In [3]: cache.get('foo')
Out[3]: 'bar'
celery 后端可以像这样配置使用缓存:
CELERY_RESULT_BACKEND = 'djcelery.backends.cache:CacheBackend'