У меня есть программа на C++, которая использует C API для использования моей библиотеки Python. И библиотека Python, и код C++ являются многопоточными.
В частности, один поток программы C++ создает экземпляр объекта Python, который наследуется от threading.Thread
. Мне нужно, чтобы все мои потоки C++ могли вызывать методы для этого объекта.
С самых первых попыток (я наивно просто создаю экземпляр объекта из основного потока, затем жду некоторое время, затем вызываю метод) я заметил, что выполнение потока Python, связанного с только что созданным объектом, останавливается, как только выполнение возвращается к программе на С++.
Если выполнение остается с Python (например, если я вызываю PyRun_SimpleString("time.sleep(5)");
), выполнение потока Python продолжается в фоновом режиме, и все работает нормально, пока ожидание не закончится и выполнение не вернется к C++.
Я явно делаю что-то не так. Что мне нужно сделать, чтобы оба мои C++ и Python были многопоточными и могли хорошо работать друг с другом? У меня нет предыдущего опыта в этой области, поэтому, пожалуйста, не предполагайте ничего!