Влияние Pydevd на многопроцессорность и многопоточность Python - PullRequest
0 голосов
/ 04 июня 2019

Каково влияние отладчика pydevd.py - pydev, используемого Eclipsed и Pycahrm - на multiprocessing & threading?

python

Когда я запускаю свой сервер python - который использует оба multiprocessing & threading - без отладки, он вылетает при запуске без полезной трассировки. Однако, когда я работаю с отладчиком Pycharm, процесс запускается и работает правильно.

Так что может быть причиной такой разницы в производительности? Может ли это быть сериализация Process() или навязывание некоторых заказов на Thread()?

1 Ответ

1 голос
/ 05 июня 2019

Ну, может быть, у вас есть какое-то состояние гонок и просто отладчик запускает все в другом порядке (он делает некоторые "патчи" для автоматической привязки к подпроцессам и делает много вещей, чтобы сбросить его состояние в новый процесс).

Обратите внимание, что одновременное использование threading и multiprocessing может быть очень сложным, если вы запускаете свои подпроцессы с fork в Linux (для возобновления в угловых случаях ожидаются тупики, если вы это делаете что) - если вы работаете на Python 2, обходного пути нет, но если вы на Python 3, вы можете установить метод запуска на spawn: https://docs.python.org/3/library/multiprocessing.html#multiprocessing.set_start_method.

Я понимаю, что есть случаи, когда метод fork может быть предпочтительнее, чем spawn (чтобы избежать копирования слишком большого количества памяти в некоторых случаях). Если это ваш вариант использования, вы не должны использовать потоки, чтобы продолжать использовать fork, или вы должны быть очень осторожными в этом взаимодействии и сбросить все, что поток может коснуться в новом процессе, и удалить ссылки на все потоки. и перезапустите их в новом процессе (отладчик является многопоточным и делает много вещей, чтобы попытаться обойти это, но я все еще осознаю, что при наличии потоков в некоторых угловых случаях он может аварийно завершиться - редко - только потому, что вы работаете с этими потоками в зависимости от блокировок системного уровня).

...