Django celery 4 - ValueError: int() 的无效文字,当启动 celery worker 时,基数为 10

Posted

技术标签:

【中文标题】Django celery 4 - ValueError: int() 的无效文字,当启动 celery worker 时,基数为 10【英文标题】:Django celery 4 - ValueError: invalid literal for int() with base 10 when start celery worker 【发布时间】:2018-08-31 06:04:08 【问题描述】:

我已将我的 celery.py 配置为其文档,但我将我的 celery 代理 URL 放到 AWS SQS 但我无法启动它。当我运行 celery worker 时,我得到 ValueError 为:

文件“/Users/abd/Desktop/proj-aws/lib/python3.6/site-packages/celery/bin/base.py”,第 244 行,在 __call__ ret = self.run(*args, **kwargs) 运行中的文件“/Users/abd/Desktop/proj-aws/lib/python3.6/site-packages/celery/bin/worker.py”,第 255 行 **kwargs) 文件“/Users/abd/Desktop/proj-aws/lib/python3.6/site-packages/celery/worker/worker.py”,第 99 行,在 __init__ self.setup_instance(**self.prepare_args(**kwargs)) setup_instance 中的文件“/Users/abd/Desktop/proj-aws/lib/python3.6/site-packages/celery/worker/worker.py”,第 120 行 self._conninfo = self.app.connection_for_read() 文件“/Users/abd/Desktop/proj-aws/lib/python3.6/site-packages/celery/app/base.py”,第 752 行,在 connection_for_read return self._connection(url or self.conf.broker_read_url, **kwargs) _connection 中的文件“/Users/abd/Desktop/proj-aws/lib/python3.6/site-packages/celery/app/base.py”,第 828 行 'broker_connection_timeout',connect_timeout __init__ 中的文件“/Users/abd/Desktop/proj-aws/lib/python3.6/site-packages/kombu/connection.py”,第 181 行 url_params = parse_url(主机名) 文件“/Users/abd/Desktop/proj-aws/lib/python3.6/site-packages/kombu/utils/url.py”,第 34 行,在 parse_url 方案、主机、端口、用户、密码、路径、查询 = _parse_url(url) 文件“/Users/abd/Desktop/proj-aws/lib/python3.6/site-packages/kombu/utils/url.py”,第 52 行,在 url_to_parts 零件端口, 端口中的文件“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/parse.py”,第 167 行 端口 = int(端口,10) ValueError:int() 的无效文字,基数为 10:'xi'

我一直在环顾四周,但似乎不知道如何解决这个问题。这个你能帮我吗!非常感激!

【问题讨论】:

可以加celery.py吗? 【参考方案1】:

我遇到了同样的问题,并解决了。

首先检查(很有可能)您的 AWS 访问密钥 ID 或密钥在某处包含“xi/”,并且您有:

BROKER_URL = "sqs://%s:%s@" % (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY)

如果是这样,那么您的问题出在 URL 不安全键上,解决方法是:

BROKER_URL = 'sqs://0:1@'.format(
    urllib.parse.quote(AWS_ACCESS_KEY_ID, safe=''),
    urllib.parse.quote(AWS_SECRET_ACCESS_KEY, safe='')
)

注意:如果使用 Python 2.x,请使用 urllib.quote

【讨论】:

我按照celery docs 使用kombu.utils.url。如果你的字符串包含'/',你必须使用safe='' 这也可以用来修复redis的连接!

以上是关于Django celery 4 - ValueError: int() 的无效文字,当启动 celery worker 时,基数为 10的主要内容,如果未能解决你的问题,请参考以下文章

django 1.11 与 celery 4.0 和 djcelery 兼容性问题

Django celery 4 - ValueError: int() 的无效文字,当启动 celery worker 时,基数为 10

markdown Django的Celery 4周期性任务

Celery 4.2-Django RecursionError:超出最大递归深度

django+redis+celery(beat)发布定时任务

使用 Django / virtualenv 运行 celery 时找不到“__main__”模块