我应该如何在 AWS lambda 实现中处理 joblib 多处理?

Dav*_*RGP 6 lambda warnings python-3.x scikit-learn joblib

我在 AWS 中有一个相对简单的线性回归 lambda。该函数被调用的每个实例日志都会显示以下内容:

/opt/python/sklearn/externals/joblib/_multiprocessing_helpers.py:38: UserWarning: [Errno 38] Function not implemented. joblib will operate in serial mode
Run Code Online (Sandbox Code Playgroud)
warnings.warn('%s. joblib will operate in serial mode' % (e,))
Run Code Online (Sandbox Code Playgroud)

我怀疑这是由于 sklearn 在 lambda(即“无服务器”)上运行并试图根据这个问题这个 GH 问题确定它的多处理能力。

我还从 GH 了解到,这不是一个“可修复”的问题,在该硬件上部署这些依赖项时总会发生这种情况。我正在返回我的预期结果(尽管我目前已最大化默认的最小 lambda 内存 128mb)。

我的目标是控制警告,并知道是否有办法:

  • 停止 sklearn 寻找多处理,从而防止发出警告
  • 捕获此特定警告并防止其从我的函数传递到 cloudwatch 日志中
  • 如果两者都可能,从 aws 架构/pythonic 的观点来看,哪一个更可取?

sed*_*deh 2

要捕获警告并防止其传递到 cloudwatch 日志中,您可以按如下方式过滤警告。

import json
import warnings
warnings.filterwarnings('error') 
try:
    import sklearn
except Warning:
    pass 

def lambda_handler(event, context):
    # TODO implement
    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }
Run Code Online (Sandbox Code Playgroud)

此处的文章(特别是在最后)重新创建并过滤了警告。