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

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

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

  • Как вычислить Centroid в python
  • Вычисление хеша md5 структуры данных
  • Добавьте предварительную обработку Tensorflow к существующей модели Keras (для использования в Tensorflow Serving)
  • Вызов Python из Ruby
  • Python: назначение вывода печати переменной
  • Форматирование xlabels datetime в matplotlib (метод pandas df.plot ())
    1. Поток Python и, следовательно, GIL отключен в pyconfig.h, чтобы он был простым (#undef WITH_THREAD)
    2. Все измененные глобальные переменные исходного кода Python Interpreter переместились в выделенную кучу структуру, на которую ссылаются через локальное хранилище потоков (ссылка: Python на телефоне ).

    Мои вопросы:

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

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

    • Несколько независимых интерпретаторов Python в программе на C / C ++?
    • Несколько интерпретаторов питона в одном и том же процессе
    • Lua Versus Python

  • pandas: как запустить ось с мультииндексированием?
  • Не удается установить PIL после Mac OS X 10.9
  • Как записать данные в формате csv в виде строки (а не файла)?
  • Как я могу сделать defaultdict безопасным для неопытных клиентов?
  • Библиотека Python для внедрения поставщика услуг и поставщика удостоверений на основе SAML2?
  • Численное интегрирование Python с правилом Симпсона
  • One Solution collect form web for “Несколько независимых встроенных интерпретаторов Python для нескольких потоков операционной системы, вызванных из C / C ++-программы”

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

    Плюсы:

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

    Минусы:

    • Возможно, немного больше избыточного веса, в зависимости от вашей платформы ( относительно легкие процессы на Linux )

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

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

    Python - лучший язык программирования в мире.