Как предотвратить, чтобы SIGINT в одном процессе Heroku заставлял других закрываться? - PullRequest
0 голосов
/ 21 октября 2019

У меня есть проект Django, который состоит из четырех отдельных процессов Heroku. Procfile включен здесь:

jobs: python manage.py sync_hacker_news
web: gunicorn project.wsgi --log-file -
rqworker_default: python manage.py run_worker
rqworker_high: python manage.py run_worker --high

web запускает веб-сервер, а rq_worker_* запускает рабочие очереди Redis с высоким и низким приоритетом для асинхронных задач. jobs является проблемной задачей. Он отвечает за вызов следующей команды управления:

import logging

from apscheduler.schedulers.background import BackgroundScheduler
from django.core.management.base import BaseCommand
from django_apscheduler.jobstores import (DjangoJobStore, register_events,
                                          register_job)

from subscriptions import autocomplete
from subscriptions.notifications import schedule

scheduler = BackgroundScheduler()
scheduler.add_jobstore(DjangoJobStore(), "default")

logger = logging.getLogger(__name__)


@register_job(scheduler, "interval", minutes=5)
def async_hacker_news_sync():
    logger.info("Sync new data from Hacker News API.")
    autocomplete.get_accounts.delay()
    schedule.delay()

class Command(BaseCommand):
    help = "Sync usernames and notifications with Hacker News."

    def handle(self, *args, **kwargs):
        register_events(scheduler)

        scheduler.start()
        print("Scheduler started!")

Моя цель состоит в том, чтобы эта команда регистрировала задачу с помощью django_apscheduler для запроса API HackerNews каждые 5 минут.

Проблема заключается в том, чточто после выполнения этой команды она завершается (что ожидается) и приводит к вызову SIGINT. Это также приводит к закрытию задач web и rq_worker_*.

(venv) jamestimmins@Jamess-MBP-3 ~/P/hacker-subscribe-prod> heroku local -p 8000
[OKAY] Loaded ENV .env File as KEY=VALUE Format
6:46:01 PM web.1                |  [2019-10-20 18:46:01 -0700] [59366] [INFO] Starting gunicorn 19.9.0
6:46:01 PM web.1                |  [2019-10-20 18:46:01 -0700] [59366] [INFO] Listening at: http://0.0.0.0:8000 (59366)
6:46:01 PM web.1                |  [2019-10-20 18:46:01 -0700] [59366] [INFO] Using worker: sync
6:46:01 PM web.1                |  [2019-10-20 18:46:01 -0700] [59371] [INFO] Booting worker with pid: 59371
6:46:02 PM rqworker_default_0.1 |  01:46:02 Worker rq:worker:959d04ce19ae41d3a81dd3e7903ac7a2: started, version 1.1.0
6:46:02 PM rqworker_default_0.1 |  01:46:02 *** Listening on default...
6:46:02 PM rqworker_high_0.1    |  01:46:02 Worker rq:worker:96b0c75c435b44f3be0bb1ab9ea2f322: started, version 1.1.0
6:46:02 PM rqworker_high_0.1    |  01:46:02 *** Listening on high...
^C[WARN] Interrupted by User
[DONE] Killing all processes with signal  SIGINT
6:46:06 PM rqworker_default_0.1 |  01:46:06 Warm shut down requested
6:46:06 PM rqworker_high_0.1    |  01:46:06 Warm shut down requested
6:46:06 PM rqworker_high_0.1    |  01:46:06 Cold shut down
6:46:06 PM web.1                |  [2019-10-20 18:46:06 -0700] [59366] [INFO] Handling signal: int
6:46:06 PM rqworker_default_0.1 |  01:46:06 Cold shut down
6:46:06 PM web.1                |  [2019-10-21 01:46:06 +0000] [59371] [INFO] Worker exiting (pid: 59371)
6:46:06 PM rqworker_default_0.1 Exited Successfully
6:46:06 PM rqworker_high_0.1    Exited Successfully
6:46:06 PM web.1                |  [2019-10-20 18:46:06 -0700] [59366] [INFO] Shutting down: Master
6:46:06 PM web.1                Exited Successfully

Кто-нибудь видел эту проблему раньше, или есть способ запустить несколько процессов, один из которых завершается, не вызывая другиевыключить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...