Интересует скорость вызова питоновских функций из с и наоборот.
Задача такая: в риалтайме рендерится некоторая сцена и некоторые параметры этой сцены хочется расчитывать в питоне ради удобства (немного математики). Поэтому интересует именно процесс вызова питоновских функций. Это микросекунды, миллисекунды или десятки миллисекунд?
Я от питона далек, поэтому вопрос может быть очевидным.
Достаточно быстро. Не могу сказать точное время — не замерял. Мы вызывали из python рендер всей сцены в C++. 100-200 кадров в секунду — вполне нормальное явление.
При этом на python'е были написаны все игровые объекты, плюс обработка их состояний. У каждого объекта были методы update/render, которые вызывались как из питона, так и из C++.
Но я все таки посоветовал бы вам использовать lua.
Мне не понравилась работа garbage collector в питоне. Если просто вызывать из C++ питоновские функции и наоборот — ничего плохого не случится.
А вот если попытаться создать класс, который доступен как из питона, так и из C++ (с помощью boost/python), то начинается АД! Память утекает в самых неожиданных местах — это раз, удалить окончательно объект такого класса нельзя — это два. Все решает gc.
Второе: я не нашел способа создавать одновременно две и более изолированных виртуальных машин для питона. В Lua это доступно «из коробки».
В-третьих: Lua быстрее работает. Это объективное ощущение, бенчмарки не запускал — врать не буду.