This commit is contained in:
+22
-2
@@ -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
|
||||
|
||||
# Создаем очередь для передачи результата
|
||||
|
||||
Reference in New Issue
Block a user