2017-08-13 76 views
9

我想了解將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文件?或者我應該繼續將它們包含在我的包中?

+3

有趣的問題。本能地,我會說,如果'pyc'文件存在或不應該只對每個AWS Lambda容器的初始化很重要,因爲之後所有東西都應該保存在RAM中。所以我很困惑,你看到每個請求的延遲。你有沒有做過關於性能影響的結構化測試? – Dunedan

+0

那麼,我隔離並定時記錄導入語句,並通過AWS控制檯和遠程調用函數,使用和不使用pyc文件。結果總是一樣的。使用pyc文件時,只有代碼更新後的第一次調用速度很慢,而不包括反覆運行該函數的pyc文件總是需要3秒以上(它會給默認的Lambda設置帶來超時錯誤)。 – danielv

+1

由於lambdas在服務器場中運行,並且可能每次都在不同的節點上運行,因此預計生成的pyc文件在執行期間會被丟棄(以及由代碼生成的任何其他文件)。因此,如果您注意到包含已編譯的Python文件時性能有所提高,我建議您將它們包含在您的包中。 – cristianoms

回答

0

我不這麼認爲,.pyc文件是一個Byte code Python解釋器編譯源,然後執行此代碼。 考慮到這一點,我們可以控制「python虛擬機運行」的文件。

我認爲最好的辦法就是像你說:

只是繼續,包括他們與我的包。

一旦你這樣做了,代碼執行器已經有了你的字節碼文件。