【问题标题】:Boto connect_xxx method and connection poolsBoto connect_xxx 方法和连接池
【发布时间】:2013-09-06 00:39:50
【问题描述】:

如果我多次调用 boto.connect_xxx,其中 xxx 是某个服务(dynamodb、s3 等),它每次都会创建一个新的连接池吗?我想做的是这样的(Flask 中的示例):

@app.before_request
def before_request():
    g.db = connect_dynamodb()

以确保我始终连接,但我不想在每次请求之前执行此操作,如果它每次都会创建新的安全令牌等,整个 rigamarole。应用启动时只调用一次 connect_xxx() 是否安全,并根据需要依赖 boto 生成新连接等?

【问题讨论】:

    标签: python amazon-web-services flask boto


    【解决方案1】:

    最好的方法是在你的应用程序启动时调用一次 connect_xxx 方法,然后依靠 boto 来管理连接。该规则的唯一例外是如果您使用多个线程。在这种情况下,每个线程都应该创建自己的连接,因为 boto 使用的 httplib 不是线程安全的。

    即使你在每次请求之前调用 connect_xxx 方法,你真的应该没问题。 Boto 在类级别池连接,应该以非常有效的方式处理这个问题。

    【讨论】:

    • 感谢您的回答!感谢 boto 本身,没有它我就活不下去。你提到线程引发了另一个关于基本相同主题的问题,here
    • 是否有任何文档参考可用于此信息?
    • connect_xxx 方法返回AWSAuthConnection 子类的实例,这确实是线程安全的。每个进程(和连接参数)只应该这样做一次——而不是在每个线程中。连接池不存储在类级别。
    • @malthe 有任何参考资料可以指出这一点(AWSAuthConnection 是线程安全的)?
    • @TuukkaMustonen since this patch 连接对象使用一个池,这样每个连接一次只能由一个线程使用。
    猜你喜欢
    • 2011-12-06
    • 2012-01-15
    • 1970-01-01
    • 2014-10-31
    • 2011-01-26
    • 2018-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多