问题描述
如前所述,我们可以使用patch_all
为s3和sqs等AWS服务自动创建子段。我的问题是应该在哪里调用该方法。
例如,假设有2个文件使用boto3,并且我们想对其进行修补。
由于它们是独立的,因此我们必须在两者中都调用patch_all
。因此,我们将拥有:
文件a.py
:
import boto3
from xray_recorder import patch_all
patch_all()
文件b.py
:
import boto3
from xray_recorder import patch_all
patch_all()
现在,假设我们有一个名为c.py
的模块,它同时导入a.py
和b.py
:
import a
import b
在此流程中,boto3
将被修补两次。
我找到的唯一解决方案是仅从文件内部导入boto3
,例如my_boto3.py
,该文件将导入boto3
并对其进行修补。
修补boto3
有什么好的做法?谢谢
解决方法
您可以简单地在主函数中调用patch_all()
。只需遵循说明here,它就可以在同一应用程序中修补的所有库(functions and classes)中工作。