spSerg
А разве CoInitialize не нужно для каждого потока в отдельности делать?
Да. В первом своем посте я дал ссылки, не ленимся, читаем их.

AntonSlepnev
А неужели нельзя указать на COM-объект в одном месте (метод init) а использовать в другом (run)?
Не месте, а потоке. Указывай там где сочтешь нужным. Вроде не должно возникнуть проблем с использованием объетка из разных потоков. Проверь, не знаю.
Я не спрашиваю почемы ты используешь потоки, но в данном примере наиболее ресурсоемкой операцией является вызов Dispatch и если ты задался целью “разгрузить” гланый поток, то вызов Dispatch целесообразнее делать в отдельном потоке (в котором ты делаешь вызов self.put_mark).

p.s. Если ты до сих пор не понял - только run выполняется в новом потоке :-), поэтому вызов CoInitialize должен делаться именно в run.

..bw