У меня запущены следующие 3 фиктивных задания. Каждая задача завершается примерно за полсекунды, но я замечаю, что в базе данных всегда открыто 3 соединения. Почему соединения не закрываются, когда задачи заканчиваются sh?
Я также использовал pg_stat_activity
, чтобы убедиться, что значение backend_start
- это время, когда впервые начался удар.
def make_celery(_app): # type: ignore
_celery = Celery("bank_api", broker=config.BROKER_URL)
_celery.conf.timezone = "America/Los_Angeles"
class ContextTask(_celery.Task): # type: ignore
def __call__(self, *args, **kwargs): # type: ignore
with _app.app_context():
return self.run(*args, **kwargs)
_celery.Task = ContextTask
return _celery
@celery.on_after_configure.connect
def setup_periodic_tasks(sender: Celery, **kwargs: Any) -> None:
from very_good_banking import tasks
app.logger.info("Setting up period celery tasks.")
sender.add_periodic_task(60, tasks.foobar_task_1.s(), name="test 1")
sender.add_periodic_task(60, tasks.foobar_task_2.s(), name="test 2")
sender.add_periodic_task(60, tasks.foobar_task_3.s(), name="test 3")
@celery.task()
def foobar_task_1(): # ignore: type
number = random.randint(1, 100)
app.logger.info(f"foobar task 1 starting {number}")
sync_institution_accounts(
InstitutionConnection.query.get("f6a24c6a86dc4ba5b1190f3f865cd50a")
)
app.logger.info(f"foobar task 1 finishing {number}")
@celery.task()
def foobar_task_2(): # ignore: type
number = random.randint(1, 100)
app.logger.info(f"foobar task 2 starting {number}")
sync_institution_accounts(
InstitutionConnection.query.get("ea3cf5fe959b4a218135b9368ef9a44d")
)
app.logger.info(f"foobar task 2 finishing {number}")
@celery.task()
def foobar_task_3(): # ignore: type
number = random.randint(1, 100)
app.logger.info(f"foobar task 3 starting {number}")
sync_institution_accounts(
InstitutionConnection.query.get("e142c6568c5d44b1a3f3563dc56cf3a0")
)
app.logger.info(f"foobar task 3 finishing {number}")