我有非常简单的python代码来访问Amazon simple Queue Service。但我得到了
builtins.TypeError
TypeError: get_queue() missing 1 required positional argument: 'self'我的代码:
class CloudQueue(object):
conn = boto.sqs.connect_to_region("eu-west-1",
aws_access_key_id="abc",
aws_secret_access_key="abc")
@app.route('/get/<name>')
def get_queue(self, name):
if(name != None):
queue = self.conn.get_queue(str(name)) <--------- HERE
return conn.get_all_queues()
if __name__ == "__main__":
cq = CloudQueue()
app.debug = True
app.run()发布于 2014-11-30 00:26:06
您不能将方法注册为路由;在装饰器运行时,类仍在定义中,所有注册的都是未绑定的函数对象。因为它没有绑定到实例,所以没有要传入的self。
不要在这里使用类;为每个请求重新创建连接:
@app.route('/get/<name>')
def get_queue(name):
conn = boto.sqs.connect_to_region("eu-west-1",
aws_access_key_id="abc",
aws_secret_access_key="abc")
queue = conn.get_queue(name)
return 'some response string'您可以将其设置为全局,但随后需要确保在第一个请求时重新创建连接(因此,即使在使用使用子进程来处理请求的WSGI服务器时,它也可以继续工作):
@app.before_first_request()
def connect_to_boto():
global conn
conn = boto.sqs.connect_to_region("eu-west-1",
aws_access_key_id="abc",
aws_secret_access_key="abc")
@app.route('/get/<name>')
def get_queue(name):
queue = conn.get_queue(name)
return 'some response string'只有在您确定boto连接对象是线程安全的情况下,才使用此选项。
https://stackoverflow.com/questions/27204282
复制相似问题