Какова лучшая стратегия для решения этой проблемы?
Подайте заявку (возможно, после регистрации ) с описанием проблемы, желательно с воспроизводимым контрольным примером (для максимальной точности). Затем можно обсудить, каким может быть наилучший способ (или пути - для разных платформ может потребоваться разное решение).
Идея немедленного создания дочернего процесса, чтобы помочь с дальнейшим созданием дочернего процесса, была поднята ранее, чтобы решить проблему производительности, возникающую при получении дочернего процесса. Если такой подход сейчас решает две проблемы, он начинает выглядеть немного привлекательнее. Одна потенциальная трудность с этим подходом состоит в том, что spawnProcess
синхронно возвращает объект, который предоставляет PID ребенка и позволяет отправлять ему сигналы. Это немного больше работы для реализации, если в процессе есть промежуточный процесс, так как PID должен быть возвращен обратно в основной процесс до возврата spawnProcess
. Аналогичная проблема будет поддерживать аргумент childFDs
, поскольку больше невозможно будет просто наследовать файловые дескрипторы в дочернем процессе.
Альтернативное решение (которое может быть несколько более хакерским, но также может иметь меньше проблем с реализацией) может заключаться в том, чтобы вызвать sys.setcheckinterval
с очень большим номером перед вызовом os.fork
, а затем восстановить первоначальный интервал проверки в только родительский процесс. Этого должно быть достаточно, чтобы избежать переключения потоков в процессе до тех пор, пока не произойдет os.execvpe
, уничтожив все лишние потоки. Это не совсем правильно, поскольку из-за этого некоторые ресурсы (например, мьютексы и условия) останутся в плохом состоянии, но вы используете их с deferToThread
не очень часто, так что, возможно, это не влияет на ваш случай.