heroku 平台上的 Python 应用程序似乎在两个线程上启动

2024-07-03

有一个简单的Python应用程序部署在heroku平台上:

from flask import Flask

log("APP STARTED.")
# single time connection to database and logging stuff

app = Flask(__name__)

@app.route('/', methods=['GET'])
# do something

@app.route('/', methods=['POST'])
# do something

过程文件:

web: gunicorn app:app --log-file=-

在查看日志时,我发现上面的代码使用多个线程多次执行。我知道由于日志记录不一致,肯定涉及更多线程。查看日志:

2017-05-31T17:12:46.415059+00:00 app[web.1]: APP STARTED.   
2017-05-31T17:12:46.415072+00:00 app[web.1]: Executing query.  
2017-05-31T17:12:46.415688+00:00 app[web.1]: APP STARTED.    
2017-05-31T17:12:46.415717+00:00 app[web.1]: Executing query.
2017-05-31T17:12:46.436370+00:00 app[web.1]: Successful connection to database.    
2017-05-31T17:12:46.437398+00:00 app[web.1]: Successful connection to database.    
2017-05-31T17:12:46.439197+00:00 app[web.1]: Success executing query.    
2017-05-31T17:12:46.439680+00:00 app[web.1]: Success executing query.

我还可以在这里看到工作线程:

2017-05-31T18:59:10.046388+00:00 app[web.1]: [2017-05-31 18:59:10 +0000] [9] [INFO] Booting worker with pid: 9    
2017-05-31T18:59:10.132547+00:00 app[web.1]: [2017-05-31 18:59:10 +0000] [11] [INFO] Booting worker with pid: 11

如何防止多个工作线程启动并仅从一个启动?


您所看到的是预期行为。请注意,这些不是线程,而是子进程。默认情况下,gunicorn是一个分叉服务器 - 为了处理并发请求,它创建多个子进程。

您会看到两个工作进程,因为根据文档(https://devcenter.heroku.com/articles/python-gunicorn#basic-configuration https://devcenter.heroku.com/articles/python-gunicorn#basic-configuration), gunicorn荣誉WEB_CONCURRENCY环境变量,在 Heroku 上似乎默认为 2。

您可以非常直接地在本地复制该行为,通过WEB_CONCURRENCY=2 heroku local;记下两个工作进程 pid。然后运行它,无需WEB_CONCURRENCY变量,你只会看到一个工人 pid。

如果你真的想将其限制为一个进程,你可以显式设置WEB_CONCURRENCY到 1,无论是在 .env 文件中还是通过heroku config:set命令。不过,我建议不要这样做——

  • 由于它们是进程而不是线程,因此线程同步不是问题。需要注意的是,您不能依赖共享状态(例如,更新模块级变量)。例如,一个hit_counter在一个工作人员中实现的变量在第二个工作人员中根本不可见。
  • 并发性within测功机将帮助您更经济有效地扩展规模。WEB_CONCURRENCY大于 1 可以让您的 dyno 处理多个并发请求。如果将其限制为 1,则需要多个 dyno 来支持并发请求,并产生相关的 Heroku 费用。

希望有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

heroku 平台上的 Python 应用程序似乎在两个线程上启动 的相关文章

  • 将今天日期设置为模型中的默认值

    如何在模型中将默认值设置为今天日期 我的型号 vote date models DateField 投票日期 null False Blank False 所有答案都不能解决最初的问题 重述问题 如何将日期字段的默认值设置为今天的日期并仍然
  • 使用 Scipy 将字典从 Python 保存到 Matlab

    我发现将整齐生成的数据保存到 mat 文件中时遇到一些问题 我认为使用 Scipy 更简单 但似乎我弄错了 这是我要保存的数据的示例 out features array 5 00088905e 01 1 51847522e 01 4 93
  • 使用 Keras RNN 模型使用较少时间步长(不同维度)的数据进行预测

    根据RNN的性质 我们可以得到每个时间戳 时间展开 的预测概率的输出 假设我训练一个具有 5 个时间步长的 RNN 每个时间步长有 6 个特征 因此我必须像这样指定第一层 假设我们使用具有 20 个节点的 LSTM 层作为第一层 model
  • 如何使用ast.NodeVisitor的简单示例?

    有谁有一个使用 ast NodeVisitor 来遍历 Python 2 6 中的抽象语法树的简单示例吗 我不清楚访问和 generic visit 之间的区别 而且我找不到任何使用谷歌代码搜索或普通谷歌的示例 ast visit 当然 除
  • matlab的imregionalmax()和scipy.ndimage.filters.maximum_filter有什么区别

    我需要找到图像的区域最大值以获得用于分水岭分割的前景标记 我在 matlab 中看到使用该函数imregionalmax http www mathworks com help images ref imregionalmax html 由
  • 使用 Matplotlib 创建箱线图

    我正在使用 python 3 和 jupyter 笔记本 我有一个 pandas 数据框 其结构如下 location price Apr 25 ASHEVILLE 15 0 Apr 25 ASHEVILLE 45 0 Apr 25 ASH
  • 配置 argparse 以接受带引号的参数

    我正在编写一个程序 除其他外 它允许用户通过参数指定要加载的模块 然后用于执行操作 我试图建立一种方法来轻松地将参数传递到这个内部模块 并且我试图使用 ArgParse 的action append 让它构建一个参数列表 然后我将通过它 这
  • python 中的神经网络:决策/分类总是给出 0.5

    首先我想说我是一个Python初学者 对神经网络也是完全陌生的 当我读到它时 我非常兴奋 并认为我从头开始设置了一些代码 参见下面的代码 但不知怎的 我的代码无法正常工作 我猜想存在一些重大错误 在算法和编程中 但我现在找不到他们 所以 在
  • 如何在 Python 3 中使用 smtplib.sendmail() 对收件人姓名(而不是地址)中的国际字符进行编码?

    我在 Python 3 程序中使用标准 smtplib sendmail 调用来发送电子邮件 如下所示 smtp session sendmail The Sender lt email protected cdn cgi l email
  • Kivy:如何在树视图中使用 on_key_down 和 on_key_up 键盘事件?

    我在用python 2 7 and kivy 1 10 0 当我点击nameTextInput 然后树视图显示 我希望选择标签up and down键 并且当enter按下键 文本被复制 所选文本被复制到初始表单 就像您单击该项目时当前完成
  • BeautifulSoup 3.1 解析器太容易崩溃

    我在使用 BeautifulSoup 解析一些不可靠的 HTML 时遇到了麻烦 事实证明 新版本中使用的 HTMLParser 的容忍度低于以前使用的 SGMLParser BeautifulSoup 有某种调试模式吗 我正在尝试找出如何阻
  • id 是 python 中的关键字吗?

    我的编辑器 TextMate 显示id使用与我常用的变量名称不同的颜色 当用作变量名称时 是关键字吗 我不想遮蔽任何关键字 id不是一个keyword在Python中 但它是一个的名字内置功能 http docs python org li
  • Python 中的 HTML 解析器 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 使用Python文档我发现了HTML解析器 http docs python org lib modu
  • Numpy,沿数组维度应用函数列表

    我有一个类型的函数列表 func list lambda x function1 input lambda x function2 input lambda x function3 input lambda x x 和形状为 4 200 2
  • 与 C 数组相比,带有 NumPy 数组内存视图的 Cython 性能较差

    我遇到了一个非常奇怪的结果基准 http nbviewer ipython org github rasbt One Python benchmark per day blob master ipython nbs day4 python
  • Django 会话竞争条件?

    摘要 Django 会话中是否存在竞争条件 如何防止它 我在 Django 会话方面遇到了一个有趣的问题 我认为该问题涉及由于同一用户同时发出请求而导致的竞争条件 它发生在一个同时上传多个文件的脚本中 正在本地主机上进行测试 我认为这使得同
  • 在 cmd.Cmd 命令行解释器中更好地处理键盘中断

    在使用 python 的 cmd Command 创建自定义 CLI 时 如何告诉处理程序中止当前行并给我一个新的提示 这是一个最小的例子 console min py run python console min py import cm
  • Python 解释器优化

    假设我有一个字符串x Python 解释器是否足够聪明 能够知道 string replace x x 应转换为NOP 我怎样才能找到这个 是否有任何参考资料显示解释器能够根据句法分析动态执行哪种类型的优化 不 Python 不能对 NOP
  • 使用 setuptools 从私有 Gitlab 包存储库安装 Python 包

    我为我的雇主创建了一个私人套餐 由于我被禁止将其上传到 PyPI 它是专有的 因此我将其上传到我们私人 Gitlab 中心上的项目的包索引中 我可以手动安装它 pip install my package extra index url h
  • 分组依据,在 pandas 中

    select df id count distinct airports as num from df group by df id having count distinct airports gt 3 我正在尝试在 Python pan

随机推荐

  • 无法在 Visual Studio Code 中安装扩展

    我是 Arch Linux 的用户 我的问题是无法安装扩展 我遵循了 Microsoft 页面 其中说我应该单击 ctrl P 然后写入ext install package what I m looking for 所以我就这么做了 单击
  • JavaScript - 如何检测数字为小数(包括 1.0)

    感觉就像我在这里遗漏了一些明显的东西 这个问题已经被问过很多次了 答案通常可以归结为 var num 4 5 num 1 0 false 4 5 is a decimal 但是 这失败了 var num 1 0 or 2 0 3 0 num
  • 如何为我的用户启用自定义域?

    我希望允许我的用户使用他们自己的域名来访问我的网络服务 例如 如果我有一个用户的个人资料位于 example com users david 我如何允许 david 使用 exampledavid com 访问他的个人资料页面 我不希望用户
  • 在 WPF 中重构 XAML

    我的 XAML 很长并且很难维护 我想知道是否有办法进行重构之类的事情 这是一个简单的例子
  • 什么是“长”?数据类型?

    我正在查看另一位开发人员编写的一些代码 但不确定是什么long means protected string AccountToLogin long id string loginName if id HasValue try long是相
  • 如何配置默认的DispatcherServlet?

    throwExceptionIfNoHandlerFound被介绍于DispatcherServlet在 Spring 4 0 中 我试图弄清楚如何在自动配置中设置此属性DispatcherServlet由 Spring Boot 提供 但
  • 如何使用 VS 2010 将 ASP.NET 4.0 预编译为单个 DLL

    我最近从负责 ASP NET 2 0 网站的 VS 2003 升级到了 VS 2010 并迁移到了 ASP NET 4 0 到目前为止 让我的网站使用新版本进行编译一直是一件很头疼的事情 一个问题是我的 aspx cs 页面无法在我的项目中
  • python difflib 具有统一上下文格式的字符差异

    我需要以 unix 统一 diff 风格显示每行的字符差异 有没有办法使用 difflib 来做到这一点 我可以分别使用 difflib unified diff 和 difflib Differ ndiff 分别获得 统一差异 和 每行字
  • 使用 codeigniter 上传多张图片

    我使用了之前找到的一些代码一次上传一张图像 效果非常好 我想对多个图像使用相同风格的代码 该模型 function cover upload afbeelding path where the picture needs to be upl
  • 错误:无法访问声纳服务器“http://localhost:9000”

    运行以下命令时 cmd c C sonar runner 2 4 bin sonar runner bat 声纳运行器安装在构建机器上 我收到以下错误 错误 声纳服务器 http 本地主机 9000 http localhost 9000
  • 库(传单)中的错误:没有名为“传单”的包

    我像这样编写了 docker 文件来部署闪亮的 r 应用程序 FROM rocker r base latest RUN apt get update apt get install y no install recommends sudo
  • Azure DevOps 仅限制组织内的访问

    我需要仅在组织网络内部限制对 Azure DevOps 的访问 怎么可能做到呢 我可以限制 IP 地址范围还是有其他方法 Azure DevOps 是一项云服务 因此您不能直接将其限制在您的 IP 地址范围内 但是有几个选项 1 Azure
  • 如何在 Perl 中呈现打开的文件夹选择对话框?

    如何在 Perl 中打开文件夹选择对话框 取决于您使用的 GUI 系统 也许还取决于平台 例如 在 Windows 上并使用Win32 GUI 您可以使用GetOpenFileName main is your main window my
  • 如何使用 Python 将 \t 写入文件

    我建立了一个网站 用户可以在表单中输入目录路径 我的程序将提取路径并写入一个文件 我的问题是 当路径包含一些特殊单词 例如 t n 时 程序无法正确写入文件 例如 C abc test 将变为 C abc TAB est 如何将字符串更改为
  • 使用自定义 Loader 时,不会在 ViewPager 片段上调用 ​​onResume()

    简洁版本 我有一个片段维护ViewPager为了显示另外两个片段 我们称它们为FragmentOne and FragmentTwo 启动应用程序时FragmentOne是可见的并且FragmentTwo位于屏幕外 仅当向左滑动视图时才可见
  • 如何在 wampserver 中安装 php 8?

    我正在尝试在 wampserver 中安装 PHP 8 并且按照 wampserver 官方论坛中的教程进行操作 但 PHP 8 不起作用 它显示以下错误 This PHP version 8 0 2 doesn t seem to be
  • 如何从一张图像平滑过渡到另一张图像

    我有一项活动正在更改图像视图定期 为此我编写了以下代码行 imageview setImageUri resId 我正在增加资源 ID 它工作正常 但突然从一张图像转换到另一张图像 我不希望这样 我希望图像视图平滑过渡到另一个图像 我怎样才
  • JQuery 隐藏对象

    好的 伙计们 我已经编辑了问题以便您能够理解 我有 10 张图片以及它们各自的名称 所以 你有 10 张图片和 10 个段落 由于图像不同 当然也有不同的名称 所以我不能使用类 因此 我对一张图像使用了一个 ID 对其名称使用了另一个 ID
  • 如何在 android 中创建带有网格视图的自定义警报对话框?

    我怎样才能创建一个警报对话框 with a GridView如上图所示 这是一个简单的实现 在活动内的代码中调用此方法 private void showAlertDialog Prepare grid view GridView grid
  • heroku 平台上的 Python 应用程序似乎在两个线程上启动

    有一个简单的Python应用程序部署在heroku平台上 from flask import Flask log APP STARTED single time connection to database and logging stuf