我想了解將Python包與.pyc文件包含到AWS Lambda的確切效果。AWS Lambda和Python的.pyc文件
很少有參考資料我能找到這個說,沒有必要包含.pyc文件的包。但是,當我不包含這些文件時,我看到了使用Lambda函數的巨大性能。
試圖在我的包中包含一個庫(例如Jinja2)時,省略其.pyc文件時,import jinja2
所需的時間總是超過3秒。
當我提供.pyc文件時,第一次執行仍然需要3秒,但在此之後,它會下降到100-200ms(我猜,直到函數最終卸載?)。
我發現這SO question這可能表明AWS Lambda無法保存自己編譯的文件,這是否有意義?
我的問題是 - 是否有任何關於在AWS Lambda上使用Python的.pyc文件的明確信息來源?有沒有辦法讓AWS Lambda保存自己的.pyc文件?或者我應該繼續將它們包含在我的包中?
有趣的問題。本能地,我會說,如果'pyc'文件存在或不應該只對每個AWS Lambda容器的初始化很重要,因爲之後所有東西都應該保存在RAM中。所以我很困惑,你看到每個請求的延遲。你有沒有做過關於性能影響的結構化測試? – Dunedan
那麼,我隔離並定時記錄導入語句,並通過AWS控制檯和遠程調用函數,使用和不使用pyc文件。結果總是一樣的。使用pyc文件時,只有代碼更新後的第一次調用速度很慢,而不包括反覆運行該函數的pyc文件總是需要3秒以上(它會給默認的Lambda設置帶來超時錯誤)。 – danielv
由於lambdas在服務器場中運行,並且可能每次都在不同的節點上運行,因此預計生成的pyc文件在執行期間會被丟棄(以及由代碼生成的任何其他文件)。因此,如果您注意到包含已編譯的Python文件時性能有所提高,我建議您將它們包含在您的包中。 – cristianoms