我正在使用 Streamlit 制作一个基于 python 的 Web 应用程序。在Heroku中部署后,构建成功,但出现应用程序错误。我不知道源代码中的哪个位置生成了此错误。请帮我! 错误:
2022-07-18T18:55:37.985429+00:00 app[web.1]: Inotify._raise_error()
2022-07-18T18:55:37.985439+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.10/site-packages/watchdog/observers/inotify_c.py", line 398, in _raise_error
2022-07-18T18:55:37.985636+00:00 app[web.1]: raise OSError(errno.ENOSPC, "inotify watch limit reached")
2022-07-18T18:55:37.985677+00:00 app[web.1]: OSError: [Errno 28] inotify watch limit reached
2022-07-18T18:55:38.387667+00:00 heroku[web.1]: Process exited with status 1
2022-07-18T18:55:38.510041+00:00 heroku[web.1]: State changed from starting to crashed
2022-07-18T18:55:48.000000+00:00 app[api]: Build succeeded
2022-07-18T18:57:33.589417+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=invezto.herokuapp.com request_id=bc8f4556-852e-4dad-8b67-71e49ffaaf23 fwd="49.37.45.19" dyno= connect= service= status=503 bytes= protocol=https
2022-07-18T18:57:33.917128+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/favicon.ico" host=invezto.herokuapp.com request_id=46e2e615-17dc-42f6-a86d-4dfc5fd5ecfc fwd="49.37.45.19" dyno= connect= service= status=503 bytes= protocol=https ```
在命令行添加选项
--server.fileWatcherType none
帮助我解决了类似的问题。完整的示例如下所示:
streamlit run app.py --server.fileWatcherType none
更多解决方案这里
Streamlit 递归地监视应用程序脚本的父文件夹中的更改,例如
app.py
[来源].
这个想法是,如果源文件更新,应用程序将“重新运行”,以方便应用程序开发。但是,如果此文件夹包含太多子文件夹和子文件,显然
watchdog
达到限制并引发错误。如果您直接从包含大量配置文件等的主目录运行,则很容易发生这种情况。或者当您从 .git
中包含大量文件的 git 存储库运行时(只是推测)。
您可以通过将
app.py
脚本放置在仅包含您在开发过程中编辑的依赖项的(子)文件夹中来解决此问题,或者通过 --server.fileWatcherType none
并接受手动重新启动的麻烦。
streamlit run app.py --server.fileWatcherType none
(按照@swwt的建议)
由于 Visual Studio Code 中的“打开文件夹”,这实际上发生在我身上。在Linux上运行。当我在打开其他 Streamlit Python 文件的情况下启动 vscode 时。然后从较大的代码目录/存储库中的另一个目录启动/打开文件夹项目 Python/Django。但是它开始将根文件夹中的所有文件添加到监视列表中。
根目录中有数千个来自其他项目的文件。
~笔记本/工作/开发 〜笔记本/个人/开发
每个都有不同的项目。
新的 django 项目是 ~notebooks/work/dev/djangoproject
Vscode 正在监视一切,一直到〜笔记本
Streamlit 然后会抱怨。类似于太多打开的文件句柄。
花了一天左右的时间才意识到罪魁祸首。我关闭了该文件夹,然后打开其他 Streamlit 项目中的文件,从那时起一切都很好。
此问题可以通过以下方法永久解决 通过修改
fs.inotify.max_user_watches
内核参数来增加限制。
cat /proc/sys/fs/inotify/max_user_watches
echo 524288 | sudo tee /proc/sys/fs/inotify/max_user_watches
/etc/sysctl.conf
文件中:fs.inotify.max_user_watches=524288
sudo sysctl -p
请将
524288
替换为适合您需要的数字。请注意,增加限制将消耗更多的内核内存。因此,请选择适合您的系统资源的数字。