我有一个由blobtrigger触发的Azure函数。因此,基本上,每当有人将.csv上传到Azure blobstorage时,我都想清理、处理它,并将其插入sql数据库表中
当我在本地测试它时,它工作得非常好,但是在部署之后,我得到了如下错误:执行function:Functions时异常。BlobTrigger1 python退出,代码137
我了解到,当我的函数占用太多内存时,通常会引发此异常,但我使用的是一个只有26.16 MiB的.csv。这是我的密码
blobBinaryDataStream = BytesIO(myblob.read())
records = [r.decode('utf-8').split(',') for r in blobBinaryDataStream]
arr = np.array(records)
df = pd.DataFrame(arr[1:], columns=[name.replace('\r\n', '') for name in records[0]])
df = df.replace('\r\n', '')
del arr
locationDF = df.iloc[: , [0, 1, 2, 46, 47, 48, 49, 50, 51, 58, 59, 60]].copy()
locationDF.drop_duplicates(inplace=True)
df.drop(df.columns.difference(df.columns[i] for i in [0, 3, 5, 8, 25, 35, 36]), axis = 1, inplace=True)
df['date'] = df['date'].transform(lambda x: SomeFunction(x))
df = df.replace('', 0)
factdf = df.groupby([df.columns[0],df.columns[1]])[df.columns[2:]].apply(lambda x : x.astype(np.longlong).sum()).reset_index()
quoted = urllib.parse.quote_plus(os.environ['ConnString'])
engine = create_engine('mssql+pyodbc:///?odbc_connect={}'.format(quoted))
locationDF.reset_index(drop=True, inplace=True)
locationDF.index = locationDF.index + 1
locationDF = locationDF.replace('', np.nan)
locationDF.to_sql('Table1', schema='dbo', con=engine, if_exists='replace', method = 'multi', chunksize = 100)
factdf.reset_index(drop=True, inplace=True)
factdf.index = factdf.index + 1
factdf.replace('', np.nan)
factdf.to_sql('Table2', schema='dbo', con=engine, if_exists='replace', method = 'multi', chunksize = 100)
FunctionApp退出,错误代码为137,这是由Python函数应用程序内存不足问题引起的
看看service limits in Microsoft Documentation基于你在函数应用程序中选择的计划,我假设你使用了消费计划
现在要检查它是否是超时问题,因为它提到了137个错误代码,请在执行函数应用程序时关注应用程序洞察日志
在错误中,如果您发现类似“函数超出了00:05:00的超时值”,请尝试调查以下几点:
检查为什么代码执行需要更多的时间,如果您发现任何这样的情况,那么我们可以从代码本身修复它
增加默认超时
下面是我们如何修改默认超时。默认情况下,它将为5分钟,我们可以相应地增加它以进行检查
检查documentation中的函数超时设置
functionTimeout表示所有函数的超时持续时间,而不是单个函数的超时持续时间
您可以更新默认超时值,保存它,然后再次测试您的函数
另外,请参阅关于Memory profiling on Python function apps的文档,以了解有关在函数中管理内存的更多信息
相关问题 更多 >
编程相关推荐