Моя настройка:
- Планировщик задач 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?
Подробнее здесь: https://stackoverflow.com/questions/787 ... -c-runtime