TGViewer
Python/ django Python/ django @pythonl · 58.8K subscribers
Post #5610 4.17K
🖥 Python `multiprocessing` и ловушка, о которую бьются даже опытные разрабы

В старых версиях Python на Linux multiprocessing часто стартовал процессы через fork().

И вот где начинается боль.

После fork() в дочернем процессе остаётся только один поток. Но состояние мира копируется как было:

* lock мог быть захвачен
* file descriptors всё ещё указывают на те же файлы
* сокеты и буферы могут оказаться в странном состоянии
* другой поток, который должен был отпустить lock, уже не существует

Это поведение POSIX.

Поэтому fork + threads - классический рецепт для редких, мерзких deadlock’ов.

Хорошая практика: для multiprocessing чаще выбирать spawn или forkserver, особенно если в приложении есть потоки, логгеры, сетевые клиенты или фоновые воркеры.

Важная поправка: начиная с Python 3.14, на POSIX дефолтный start method поменяли с fork на forkserver, как раз чтобы избежать части этих проблем.

Мелочь в настройке старта процесса. Огромная разница в стабильности.

@pythonl
  • 🔥 7
  • ❤ 5
  • 👍 5
More from @pythonl
  1. Sep 20, 2026🐍 Ruff доволен, mypy молчит, тесты зелёные. А в коде четыре одинаковых функции Автор стат…
  2. Sep 19, 2026🐍 В CPython одно чтение `__dict__` может навсегда замедлить доступ к атрибутам конкретног…
  3. Sep 18, 2026🔥 Qwen представила Qwen3.8-Omni-Flash - свою первую мультимодальную модель, изначально за…
  4. Sep 17, 2026🔥 Package Doctor - необычный security-сканер для Python-зависимостей Он отвечает не тольк…
  5. Sep 17, 2026🔥 Один из лучших обучающих курсов на StepiK по SQL SQL можно знать годами и всё равно тер…
  6. Sep 16, 2026🔥 Django Q() objects — один из самых полезных инструментов ORM, который многие используют…
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 →