Подтвердить что ты не робот

Несколько независимых встроенных интерпретаторов Python для нескольких потоков операционной системы, вызванных из C/С++-программы

Вложение интерпретатора Python в Приложение C/С++ хорошо документировано. Каков наилучший подход для запуска нескольких интерпретаторов python для нескольких потоков операционной системы (т.е. Один интерпретатор в одном потоке операционной системы в рамках одного процесса), который вызывается из приложения C/С++? Такие приложения могут также иметь проблемы, связанные с фрагментацией памяти, и ограничения Py_Finalize().

Одним из таких подходов может быть следующее:

  • поток Python и, следовательно, GIL отключен в pyconfig.h, чтобы он был простым (#undef WITH_THREAD)
  • Все изменяемые глобальные переменные исходного кода Python интерпретатора переехал в куче выделено структуры ссылочного через Thread Local Storage (Код: Python на телефон).

Мои вопросы:

  • Есть ли лучший подход?
  • Существуют ли какие-либо инструменты, которые могут автоматизировать преобразование глобальных переменных исходного кода Python Interpreter в выделенную кучу структуру, указанную через TLS (Thread Local Storage)?

Похожие темы обсуждаются здесь:

4b9b3361

Ответ 1

Это не совсем ответ на ваш вопрос, но вы можете использовать отдельные процессы вместо потоков, тогда проблемы должны исчезнуть.

Плюсы:

  • Не нужно взломать python (и убедиться, что результат работает во всех предполагаемых случаях)
  • Вероятно, меньше усилий по разработке.
  • Простое обновление до новых версий python
  • Четко определенные интерфейсы между различными процессами, поэтому проще получить право и отлаживать

Минусы:

Если вы используете разделяемую память для IPC, то полученный вами код приложения не должен сильно отличаться от того, что вы получили бы с потоками.

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