Python 使用boto时,长时间运行的客户端对象是否安全?
假设我有一个长时间运行的web服务器,可以调用AWSAPI?拥有一个长时间运行的客户机对象是否安全,或者该对象是否可能损坏并弄乱我的web服务器?具体来说,这样做更好吗Python 使用boto时,长时间运行的客户端对象是否安全?,python,amazon-web-services,boto3,Python,Amazon Web Services,Boto3,假设我有一个长时间运行的web服务器,可以调用AWSAPI?拥有一个长时间运行的客户机对象是否安全,或者该对象是否可能损坏并弄乱我的web服务器?具体来说,这样做更好吗 import boto3 client = boto3.client('elb') def function(): do stuff with client 还是这个 import boto3 def function(): client = boto3.client('elb') do stuf
import boto3
client = boto3.client('elb')
def function():
do stuff with client
还是这个
import boto3
def function():
client = boto3.client('elb')
do stuff with client
前者更好,因为我可以在多个函数中重用相同的客户机对象。如果上述安全问题有效,后一个选项会更好。我喜欢这样做的方法是将客户端作为参数传递给将使用它的函数。差不多
import boto3
def function(param1, param2, client=None):
if client is None:
client = boto3.client('elb') # use default client
return client.do_stuff(param1, param2)
def function2(param3, param4, client=None):
if client is None:
client = boto3.client('elb') # use default client
return client.do_different_stuff(param3, param4)
然后你可以这样称呼它:
import boto3
client = boto3.client('elb')
stuff = function("a", "b", client=client)
different_stuff = function2("c", "d", client=client)
这是对在函数中实例化它的改进,因为您可以使用一个客户机执行多个操作,但您不必确保客户机存在于所有这些函数的可读范围内,您只需将其作为参数传递。这样做比将其放入闭包有什么好处?您可以创建一个客户机,并让它使用不同的函数执行多个不同的操作。我对我的答案增加了一点——希望这能解释这一点。