You should not call GUI code from outside your main thread.
See e.g. here: https://wiki.wxpython.org/LongRunningTasks or http://www.blog.pythonlibrary.org/2010/05/22/wxpython-and-threads/
So you can post events to the main thread which will then update things.
You may also do the update inside an EVT_IDLE
handler. Often that’s fast enough.
Then use e.g. standard library collections.deque()
to pass data to the main thread.
For controlling the worker thread you may use threading.Event
.