У меня есть метод python, который реализован следующим образом:
def start(self):
try:
self.is_running = True
self._main_loop()
except Exception as ex:
path='exceptions-servicecore.log'
track = traceback.format_exc()
exception_time = datetime.now().strftime("%d/%m/%Y %H:%M:%S")
with open(path, 'a') as f:
f.writelines(f'\n{exception_time} : exception occured {ex.args} \n{track}')
def start_async(self):
st = threading.Thread(target=self.start)
st.start()
Здесь _main_loop()
затем запускает несколько команд и выполняет обратные вызовы, отправленные из C ++ / C# et c.
Использование Pybind11
Я просто вызываю start_async
следующим образом:
this->startFuncAsync = this->obj.attr("start_async");
...
CORE_API void Core::Start(bool async)
{
try
{
if (async)
{
this->startFuncAsync();
}
else
{
this->startFunc();
}
}
catch (std::exception ex)
{
std::cout << ex.what() << std::endl;
}
}
Но, похоже, он просто не работает должным образом.
Он отлично работает в Python , но когда дело доходит до C ++ или C#, которые вызывают функцию C++
выше, это не показывает никакого вывода! Секции python, которые вызывают обратные вызовы, работают, когда я записываю их выполнение в текстовый файл. однако на стороне клиента нет активности. Я не вижу каких-либо выводов для C ++ или C#. Обратные вызовы работают и выводят необходимую информацию на консоль (C ++ или C#).
Функция non-asyn c (start
), однако, работает просто отлично.
Итак, мой вопрос, это ожидаемое поведение? Разве это не должно работать независимо от того, как функция вызывается в Python или за ее пределами?