I'm going to add a python console widget (into a C++ GUI) below some other controls:
Many classes are going to be exposed to the python code, including some access to GUI (maybe I'll consider PyQt).
Should I run the Python code in a separate thread?
Since you're apparently wanting to embed a Python interpreter to use Python as a scripting language in a what seems to be a Qt application, I suggest you have a look at PythonQt.
With the PythonQt module, Python scripts will be able to interact with the GUI of your host application.
Unlike PyQt and Qt Jambi, PythonQt is not designed to provide support for developers writing standalone applications. Instead, it provides facilities to embed a Python interpreter and focuses on making it easy to expose parts of the application to Python.
If I understood your needs correctly, that's all you need.
It's possible to embed PyQt in your application (even a Qt application) and your Python scripts will be able to provide their own GUI while interacting with your application scripting API.
About thread safety, Qt offers a thread-safe way of posting events, and signal-slot connections across threads.