【问题标题】:Flake8 times out on circle-ciFlake8 在 circle-ci 上超时
【发布时间】:2020-07-17 09:13:40
【问题描述】:

我们的circle-ci 工作流程中有一个flake8 构建阶段,并且此步骤通常由于超时而失败:

Too long with no output (exceeded 10m0s): context deadline exceeded

同时,同一阶段在我们的 Macbook 上本地运行得相当好:

% time make lint
poetry run black  .
All done! ✨ ???? ✨
226 files left unchanged.
isort -y
Skipped 2 files
PYTHONPATH=/path/to/project poetry run flake8 --show-source
0
make lint  44.00s user 4.90s system 102% cpu 47.810 total

我们尝试通过将-vv 标志添加到flake8 来调试问题,认为我们会得到一些需要太长时间的插件名称,但我们甚至没有日志中的时间戳:

flake8.processor          ForkPoolWorker-31   1004 WARNING  Plugin requested optional parameter "visitor" but this is not an available parameter.
flake8.processor          ForkPoolWorker-8   1080 WARNING  Plugin requested optional parameter "visitor" but this is not an available parameter.
flake8.bugbear            ForkPoolWorker-26   1082 INFO     Optional warning B950 not present in selected warnings: ['E', 'F', 'W', 'C90']. Not firing it at all.

flake8 会冻结在 CircleCI 上是否有任何已知原因?如何调试问题?

【问题讨论】:

  • 如果限制内核解决了问题,则多处理模块可能报告的内核数量超过可用内核,并且它正在上下文切换到死亡 - 当前的 flake8 维护者

标签: python circleci flake8


【解决方案1】:

当使用venv 等虚拟环境时,您应该忽略[flake8]-config 中的文件夹(这就是发生在我身上的事情)。假设您正在使用 virtualenv .venv 创建一个 virtualenv,它看起来像这样:

[flake8]
exclude = .venv

我的报道也是如此,通过在该配置中添加omit 来修复(找到解决方案here):

# pyproject.toml file content
[tool.coverage.run]
omit = [
    "tests/*",
    ".venv/*",
]

【讨论】:

    【解决方案2】:

    目前,我们似乎找到的解决方案是限制运行 flake8 的内核数量:

    .flake8

    [flake8]
    ...
    jobs = 6
    

    不确定它是否是正确的解决方案,但你去吧。如果有更好的解决方案,我会接受。

    【讨论】:

      【解决方案3】:

      我也只在 circle-ci 中遇到过超时,但这是由于在管道上安装依赖项的特定方式,创建了一个 .venv 文件夹,该文件夹未在 flake8 配置中排除。

      -v 选项帮助我注意到 flkae8 正在分析的大量文件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-25
        • 2015-09-22
        • 2019-10-17
        相关资源
        最近更新 更多