首页 > 解决方案 > Python Lambda响应在swift应用程序上超时,但该函数运行没有问题

问题描述

我有一个用 python 编写的 lambda 函数,它使用 iOS 应用程序提供的数据运行信号处理算法。

iOS 应用程序成功调用该函数,但一段时间后出现超时错误:

会话任务失败并出现错误:错误域=NSURLErrorDomain 代码=-1001“请求超时。” UserInfo={_kCFStreamErrorCodeKey=-2102, NSUnderlyingError=0x282711350 {错误域=kCFErrorDomainCFNetwork Code=-1001 "(null)" UserInfo={_kCFStreamErrorCodeKey=-2102, _kCFStreamErrorDomainKey=4}}, _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask .<6>, _NSURLErrorRelatedURLSessionTaskError=( "LocalDataTask .<6>" ), NSLocalizedDescription=请求超时。, NSErrorFailingURLStringKey= https://mylambdaURL/invocations , NSErrorFailingURLKey= https://mylambdaURL/invocations , _kCFStreamErrorDomainKey=4}

我像这样调用函数:

lambdaInvoker.invokeFunction("myLambdaName", jsonObject: jsonObject)
            .continueWith(block: {(task:AWSTask<AnyObject>) -> Any? in

                if( task.error != nil) {
                    print("Error: \(task.error!)")
                    lambdaLogs.errors += 1
                    return nil
                }
                if let JSONDictionary = task.result as? NSDictionary {
                    lambdaLogs.responses += 1
                }
                return nil
            })

但是,Lambda 函数的日志没有显示任何错误,该函数成功运行,甚至可以毫无问题地写入 dynamoDB 表。所以 Lambda 没有超时,但是,该函数运行了大约 60 秒。

调用 lambda 的时间大约有一半会发生此错误。

有任何想法吗?

编辑:

我尝试为在 appDelegate 中执行此操作的请求增加 NSURLSession 超时:

let urlconfig = URLSessionConfiguration.default
urlconfig.timeoutIntervalForRequest = 300

但我仍然得到超时并且 lambda 函数的最大运行时间是 70 秒,所以我想我并没有真正设置正确的 timeoutIntervalForRequest

标签: pythoniosswiftaws-lambdaaws-sdk-ios

解决方案


推荐阅读