Все динозавры останавливаются, как только один закончит с местной герокой - PullRequest
0 голосов
/ 10 февраля 2019

У меня есть очень простой веб-сервер FLASK, который я запускаю в веб-dyno платформы heroku.У меня также есть очень простая программа на Python, которая работает на отдельной Dyno, которая печатает «Hello World» и затем завершает работу.

Мой прокфайл выглядит следующим образом

web: gunicorn --bind 0.0.0.0:$PORT wsgi
test: python helloWorld.py

С помощью heroku local, как только программа hello world завершит свою работу, веб-динамо также будет убито:

$ 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

1 Ответ

0 голосов
/ 10 февраля 2019

Очевидно, это преднамеренное поведение от мастера.См. Обсуждение на Github :

Форман предполагает, что все процессы являются долгоживущими.Если какой-либо из процессов завершается, Foreman останавливает все процессы.

Единственное решение - сделать HelloWorld.py долгоживущим.

...