[Boost.Python] imports and callbacks
Hi, Here is an example Python class that will be executed by an embedded Python interpreter: import math; class Subsystem: def __init__(self) : simulation.event.register(self.event_callback) def event_callback(self) : #import math cosine = math.cos(simulation_time) new_subsystem = Subsystem() As you can see, at construction the Subsystem class registers a callback functions via the simulation.event object. The simulation.event object is a C++ object exported via Boost.Python into the main namespace. The simulation.event.register function in C++ has only one argument: a boost::python::object to copy the given callback. Lets say this boost::python::object is named Function. When I call Function(), the callback is correctly called. The interpreter however complains that math.cos is unknown (i.e. ignoring the "import math;" at the beginning of the python code). If I uncomment #import math in the event_callback definition, everything works fine. At first I thought that boost::python::object was ignoring both the local and the main namespaces used by the embedded python interpreter when event_callback was registered. But I realized later that I could still access objects in the main namespace such as the simulation.event object. Is it possible that the top "import math" only affects the local namespace, and that this local namespace is not reused when the callbacked is called through a boost::python::object ? Also, what is the performance impact of the "import math" in the callback? Putting the import inside event_callback is not very annoying, as long as it does not affect performances. Tanguy
participants (1)
-
Tanguy Fautre