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