[ВОЛК] оптимизируем работу с event_loop
ci/woodpecker/push/woodpecker Pipeline was successful

This commit is contained in:
2026-01-10 14:54:31 +03:00
parent bccf3e7717
commit 8556b1f508
2 changed files with 57 additions and 3 deletions
+22 -2
View File
@@ -1032,11 +1032,31 @@ def api_publish_post(post_id):
# Функция для запуска в отдельном потоке
def run_async_func():
try:
# Создаем новый event loop для этого потока
# Это важно при работе с gunicorn, который может иметь свой event loop
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
result = loop.run_until_complete(publish_to_tg(post['vk_post_id']))
return result
try:
result = loop.run_until_complete(publish_to_tg(post['vk_post_id']))
return result
finally:
# Закрываем event loop после завершения
# Это важно для предотвращения утечек ресурсов
try:
# Отменяем все незавершенные задачи
pending = asyncio.all_tasks(loop)
for task in pending:
task.cancel()
# Ждем завершения отмененных задач
if pending:
loop.run_until_complete(asyncio.gather(*pending, return_exceptions=True))
except Exception:
pass
finally:
loop.close()
except Exception as e:
import traceback
log_event(f"Ошибка в run_async_func: {str(e)}\n{traceback.format_exc()}")
return e
# Создаем очередь для передачи результата