heroku - 一旦完成了heroku local,所有测功机都会停止
问题描述
我有一个非常简单的 FLASK 网络服务器,我在 heroku 平台的网络测功机中运行。我还有一个非常简单的 python 程序,它在一个单独的测功机上运行,它打印“hello world”然后退出。
我的 procfile 看起来像这样
web: gunicorn --bind 0.0.0.0:$PORT wsgi
test: python helloWorld.py
使用 heroku local,只要 hello world 程序完成,web dyno 也会被杀死:
$ heroku local
8:54:29 AM test.1 | Hello World
[DONE] Killing all processes with signal SIGINT
8:54:29 AM test.1 Exited Successfully
8:54:29 AM web.1 | Traceback (most recent call last):
8:54:29 AM web.1 | File "/anaconda3/bin/gunicorn", line 7, in <module>
8:54:29 AM web.1 | from gunicorn.app.wsgiapp import run
8:54:29 AM web.1 | File "/anaconda3/lib/python3.7/site-packages/gunicorn/app/wsgiapp.py", line 9, in <module>
8:54:29 AM web.1 | from gunicorn.app.base import Application
8:54:29 AM web.1 | File "/anaconda3/lib/python3.7/site-packages/gunicorn/app/base.py", line 11, in <module>
8:54:29 AM web.1 | from gunicorn._compat import execfile_
8:54:29 AM web.1 | File "/anaconda3/lib/python3.7/site-packages/gunicorn/_compat.py", line 267, in <module>
8:54:29 AM web.1 | import inspect
8:54:29 AM web.1 | File "/anaconda3/lib/python3.7/inspect.py", line 1087, in <module>
8:54:29 AM web.1 | 'args, varargs, varkw, defaults, kwonlyargs, kwonlydefaults, annotations')
8:54:29 AM web.1 | File "/anaconda3/lib/python3.7/collections/__init__.py", line 397, in namedtuple
8:54:29 AM web.1 | exec(s, namespace)
8:54:29 AM web.1 | File "<string>", line 1, in <module>
8:54:29 AM web.1 | KeyboardInterrupt
8:54:29 AM web.1 Exited with exit code null
我怎样才能防止这种情况?
我知道问题在于 helloWorld.py 退出。如果我创建一个不终止的脚本,则不会发生问题。
print("Hello World", flush=True)
while True:
pass
解决方案
显然,这是工头的故意行为。请参阅Github上的讨论:
Foreman 假设所有过程都是长期存在的。如果任何进程退出,Foreman 将停止所有进程。
唯一的解决方案是让 HelloWorld.py 长寿。
推荐阅读
- python - 第一次退出应用程序后保存excel文件的问题
- firebase - Firebase 支出和 AdMob 广告
- php - 调用外部程序(postmap)时php exec()返回错误
- laravel - Laravel 5.8 - 保存加密的用户电子邮件
- c++ - 为特定模板值添加成员变量的任何方式?
- if-statement - Else 行中的非法表达
- encoding - 视频编码标准(如 h.264)如何序列化运动预测?
- r - 在 R 中创建多元 QQ 图
- html - 为什么我的盒子 div 位于应该在它上面的两个元素后面?
- python - 我想知道我对使用 keras 实现 lstm 层是否正确