TGViewer
Python/ django Python/ django @pythonl · 58.7K subscribers
Post #5334 9.46K
🐍 Самая крутая фича Python 3.14 - `sys.remote_exec()` (объясняю по-человечески)

Идея простая:
✅ у тебя уже запущено Python-приложение (например FastAPI в Docker/K8s)
✅ оно уже дошло до нужного состояния (в памяти есть переменные, сессии, кеши)
❌ но тебе нужно посмотреть “что внутри” или поставить дебаггер

Раньше ты делал так:
- добавлял debugpy в код
- перезапускал приложение
- заново воспроизводил баг

Python 3.14 даёт новый чит-код:

sys.remote_exec() позволяет выполнить кусок Python-кода ВНУТРИ уже работающего Python-процесса.
То есть буквально “вколоть” скрипт в живой процесс.

Это как:
🔹 зайти внутрь процесса
🔹 выполнить print(), импорт, запись переменных
🔹 или даже подключить дебаггер
без рестарта вообще.


Пример: что можно сделать через sys.remote_exec()

Допустим у нас есть работающий процесс Python.

1) Мы хотим “добавить” туда код:
- вывести PID
- посмотреть глобальные переменные
- записать лог
- даже поменять значение переменной


# Этот код выполняется СНАРУЖИ и запускает инжект внутрь процесса
import sys

target_pid = 12345 # PID запущенного Python процесса

payload = r"""
import os
import time

print("✅ Injected into running process!")
print("PID:", os.getpid())
print("Time:", time.time())

# Пример: читаем что есть в глобальном пространстве
g = globals()
print("Globals keys sample:", list(g.keys())[:10])

# Пример: создаём переменную прямо в процессе
INJECTED_FLAG = True
"""

# Новое API Python 3.14
sys.remote_exec(target_pid, payload)



Пример 2: инжектим debugpy (дебаг без рестарта)


Самая хайповая штука - можно подключить debugpy в уже живое приложение.
То есть приложение уже крутится, у него есть состояние, и ты просто включаешь “прослушку” дебаггера на порту.


import sys

target_pid = 12345 # PID работающего uvicorn / fastapi процесса

payload = r"""
import debugpy

HOST = "0.0.0.0"
PORT = 5679

debugpy.listen((HOST, PORT))
print(f"🐞 debugpy is listening on {HOST}:{PORT}")

# если хочешь остановить выполнение и ждать пока подключишь IDE:
# debugpy.wait_for_client()
# print("✅ debugger attached!")
"""

sys.remote_exec(target_pid, payload)


Дальше:
- ты делаешь port-forward (если Docker/K8s)
- подключаешь VS Code / PyCharm / nvim к localhost:5679
- ставишь breakpoints и дебажишь как обычно


Что важно

1) Это не “удалённое выполнение” как ssh.
Это прям “внутри процесса” - доступ к памяти, переменным, импортам.

2) Это опасно для продакшена.
Требует прав уровня SYS_PTRACE (можно читать/менять процессы) - поэтому только для локалки/стендов.

3) Это может стать стандартом для отладки контейнеров:
- баг воспроизводится только в k8s
- рестарт = баг пропал
- а тут просто подключился и посмотрел

📌 Статья на эту тему

@pythonl
  • 🔥 26
  • ❤ 16
  • 👍 8
  • 😱 4
More from @pythonl
  1. Sep 28, 2026🚀 Jina-OCR-v1 разбирает целые страницы в Markdown со скоростью 2,57 страницы/с Jina AI пр…
  2. Sep 27, 2026🐍 В Python 3.15 решили мягко «похоронить» re.match() re.match() никуда не удаляют, но для…
  3. Sep 26, 2026⚡️ Qwen-Image за 6 шагов: Viggle ускорили генерацию и редактирование в 5 раз Viggle выложи…
  4. Sep 25, 2026🖥 Заголовки безопасности для FastAPI - одной строкой 🛡️ fastapi-security-headers добавля…
  5. Sep 24, 2026Линтер для инструкций ИИ-агентов LintLang проверяет AGENTS.md, CLAUDE.md, SKILL.md, описан…
  6. Sep 24, 2026‼️Ваши данные уже слиты. Вопрос лишь в том, кто и как ими воспользуется. Только в 2025 год…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →