由于某些原因,我们会在密码中加入一些特殊字符,如标点符号等,来加强密码的强度,当在rabbitmq中使用这类包含问号等特殊字符的密码时,celery却遇到了处理错误的问题。
我们编写一个broker的url如下,我们需要连接一个rabbitmq服务器,使用的用户名为admin,密码为mypass?1234:
amqp://admin:mypass?1234@test.knktc.com//
把这个URL用于以下的代码中:
from celery import Celery # config RMQ_URL = 'amqp://admin:mypass?1234@test.knktc.com//' app = Celery('tasks', broker=RMQ_URL) @app.task def add(x, y): return x + y
一运行就会报以下的错误:
ValueError: invalid literal for int() with base 10: 'mypass'
原因就是因为密码中带有问号,导致了程序出错。
此时解决的方案就是把这个密码用urlencode处理下,处理后的代码如下:
from celery import Celery from urllib import quote # config PASSWORD = quote('mypass?1234') RMQ_URL = 'amqp://admin:{}@test.knktc.com//'.format(PASSWORD) app = Celery('tasks', broker=RMQ_URL) @app.task def add(x, y): return x + y
这次就可以欢快地运行了。
注:本文内容来自互联网,旨在为开发者提供分享、交流的平台。如有涉及文章版权等事宜,请你联系站长进行处理。