Python 线程在 Docker 容器中并行运行,但在容器在 Google Cloud Run 上运行时按顺序运行

Posted

技术标签:

【中文标题】Python 线程在 Docker 容器中并行运行,但在容器在 Google Cloud Run 上运行时按顺序运行【英文标题】:Python threads run in parallel when in Docker container, but run sequentially when container is run on Google Cloud Run 【发布时间】:2022-01-04 01:45:36 【问题描述】:

关于 SO 的第一篇文章,让我知道如何改进我的问题。

1。总结

目标:我的应用是 Craigslist 抓取工具,它会查找新帖子并将提要发送到用户的电子邮件。它有一个始终监听请求的主线程和一个由主线程管理的工作线程,工作或休眠。

预期与实际结果:如标题所述,该应用在本地容器中运行良好,但当它托管在 Cloud Run 上时,工作线程的输出和副作用会延迟到工作线程被杀死。

似乎工作线程只有在主线程调用杀死它时才启动,此时工作线程只执行一次它的工作迭代然后杀死自己。

没有错误消息。

2。我试过了。

我尝试更改一些 Cloud Run 容器环境设置,例如增加内存量和 vCPU 数量。

settings

请告诉我哪些附加信息会有所帮助。

【问题讨论】:

【参考方案1】:

设置这个解决了问题:

课程:始终检查所有设置。

【讨论】:

【参考方案2】:

除非您为 Cloud Run 启用 No CPU Throttling,否则您无法使用后台线程。

有关支持您的工作负载的最新功能,请参阅本文:

Run more workloads on Cloud Run with new CPU allocation controls

Documentation

总之添加这个命令行选项:--no-cpu-throttling

gcloud beta run services update SERVICE-NAME --no-cpu-throttling

同时设置CPU数量大于--cpu=N

【讨论】:

以上是关于Python 线程在 Docker 容器中并行运行,但在容器在 Google Cloud Run 上运行时按顺序运行的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Python3.7 docker 容器中执行并行 PostgreSQL 查询?

Python之线程与进程

Docker 并行运行 cron 作业

Python中的多线程并行运行

并行执行 Job - 每天5分钟玩转 Docker 容器技术(134)

Jenkins容器化部署