Что вызывает утечки памяти при использовании асинхронных задач Python в долго работающем сервисе?Python

Программы на Python
Ответить
Anonymous
 Что вызывает утечки памяти при использовании асинхронных задач Python в долго работающем сервисе?

Сообщение Anonymous »

Я создаю долго работающую фоновую службу на Python с использованием asyncio, и я столкнулся с проблемой использования памяти, которая со временем становится все более серьезной. Служба планирует несколько асинхронных задач каждые несколько секунд, обрабатывает некоторую работу, связанную с вводом-выводом, а затем должна освободить память после завершения задач. Однако после нескольких часов работы использование оперативной памяти стабильно увеличивается и никогда не снижается, даже если задачи завершаются правильно.
Я подозреваю, что проблема может быть связана с тем, как я храню ссылки на задачи или обратные вызовы, но не могу точно определить, что я делаю неправильно. Я уже пробовал принудительно собирать мусор и отслеживать объекты с помощью Tracemalloc, но результаты сбивают с толку. Ниже приведена упрощенная версия моего кода, демонстрирующая структуру, которую я использую:

Код: Выделить всё

import asyncio

tasks = []

async def worker(n):
await asyncio.sleep(1)
return n * 2

async def scheduler():
while True:
task = asyncio.create_task(worker(10))
tasks.append(task)
await asyncio.sleep(0.5)

async def main():
await scheduler()

asyncio.run(main())
Даже когда задачи выполнены, память продолжает увеличиваться. Каков правильный шаблон управления задачами asyncio в долго работающем приложении, чтобы избежать утечек памяти? Должен ли я ожидать или очищать задачи по-другому, или есть лучший подход к проектированию для такого рода рабочей нагрузки?

Подробнее здесь: https://stackoverflow.com/questions/798 ... ning-servi
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»