Как встроить подинтерпретаторы Python (3.12) в многопоточную среду выполнения C++?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как встроить подинтерпретаторы Python (3.12) в многопоточную среду выполнения C++?

Сообщение Anonymous »

Python 3.12 предоставляет C-API механизма субинтерпретатора. Я пытаюсь использовать эту новую функцию для потокового планирования задач, написанную на C++, но из-за отсутствия полного понимания я сталкиваюсь с трудностями (у меня есть опыт работы со встроенным Lua, но контекст Python сильно отличается...; я' Я руководствуюсь примером https://github.com/python/cpython/blob/ ... rsmodule.c).
Моя настройка:
  • Планировщик задач C++, работающий в рабочих потоках;
  • Агенты (классы C++) с задачами (методами), которые будут выполняться в рабочем потоке потоки:
  • задачи разных агентов выполняются параллельно;
  • задачи внутри один и тот же агент выполняется последовательно (т. е. доступ к состоянию их агента непересекающийся (т. е. отсутствие условий гонки).
Задача заключается в следующем:
  • На уровне агента я хочу поддерживать состояние Python (потока?), которое обновляется методами задачи, вызывающими субинтерпретатор Python агента.
  • Подинтерпретаторы Python разных агентов должны иметь возможность работать параллельно.
Вот что у меня пока есть:

Код: Выделить всё

#include
#include 

static PyInterpreterConfig py_config = {
.use_main_obmalloc = 0,
.allow_fork = 0,
.allow_exec = 0,
.allow_threads = 1,
.allow_daemon_threads = 0,
.check_multi_interp_extensions = 1,
.gil = PyInterpreterConfig_OWN_GIL,
};

class Agent {
PyThreadState* py_thread;
PyStatus py_status;
PyInterpreterState* py_interp;
PyObject* py_interp_id;

Agent() {
// PyThreadState *save_tstate = PyThreadState_Get();
this->py_status = Py_NewInterpreterFromConfig(
&this->py_thread, &py_config);
// assert(this->py_thread != NULL);  // FAILS
// PyThreadState_Swap(save_tstate);
this->py_interp = PyThreadState_GetInterpreter(this->py_thread);
this->py_interp_id = _PyInterpreterState_GetIDObject(this->py_interp);
// assert(this->py_interp_id != NULL); // FAILS
};

}
Некоторые из моих вопросов:
  • Смогу ли я использовать интерпретатор Python в агенте (тема) уровень задач агента, которые должны выполняться в рабочих процессах (с балансировкой нагрузки) (т. е. в различных рабочих потоках)?
    Начинается ли механизм подинтерпретатора с центрального (материйского) потока Python?
Любые рекомендации, которые помогут мне реализовать на Python вышеизложенное (... если возможно...), будут очень признательны.

Подробнее здесь: https://stackoverflow.com/questions/787 ... -c-runtime
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Встроение питона в многопоточную среду C ++
    Anonymous » » в форуме Python
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Встроение питона в многопоточную среду C ++
    Anonymous » » в форуме C++
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Встроение питона в многопоточную среду C ++
    Anonymous » » в форуме Python
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Встроение питона в многопоточную среду C ++
    Anonymous » » в форуме C++
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • (Как) Компилирует ли компилятор монолитную программу как многопоточную?
    Anonymous » » в форуме C++
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»