В ответ на ваши вопросы могу ли я предложить следующие ответы, надеясь, что они помогут!
1. Есть ли в python рекомендуемый / оптимальный способ сочетания многопоточности с многопроцессорностью (как указано выше)?
Если вы вызываете разные процессы в системе, подумайте об использовании подпроцесс , который, в свою очередь, может быть вызван из множества потоков, управляемых пулом потоков . Если вам действительно нужны процессы, независимые от GIL, которому вы подчиняетесь, подумайте о переходе на multiprocessing или посмотрите, следует ли вам использовать параллельный / распределенный планировщик задач, такой как Dask.
2. Пока Executor.execute () не привязан к ЦП (за исключением порожденного процесса), могут ли возникнуть проблемы с GIL? python интерпретатор, в котором вы работаете, что может быть достигнуто с помощью multiprocessing , как упоминалось выше. Насколько я понимаю, при запуске процесса вашей ОС из этого объекта текущие потоки, которые вы используете, будут по-прежнему взаимодействовать с GIL (я уверен, что кто-то может объяснить это лучше, чем я ...)
3. Было бы проще достичь здесь параллелизма, если бы объекты Executor не имели состояния?
Они всегда будут иметь состояние в некотором смысле, если вы не отделите их от начального процесса, из которого они были инициированы. Я думаю, что если вы запускаете подпроцессы в ОС, вы можете использовать несколько исполнителей в многопоточном режиме и позволить им работать.
4. Есть ли лучший способ решить этот вариант использования?
Интересно, интересен ли вам пакет concurrent.futures
Я очень надеюсь, что это помогает, несомненно, поскольку это ранний ответ для меня, я мог бы сделать уточнение своих объяснений.
Удачи!