I had a similar problem: QGIS waits with repainting until the commands started in the same thread finished. An adoption of this very good recipe How do I prevent Qgis from being detected as "not responding" when running a heavy plugin? did the job. Maybe the following works for you. I included a sleep() to slow down the process.
from PyQt4 import QtCore
def __init__(self, layer, *args, **kwargs):
QtCore.QObject.__init__(self, *args, **kwargs)
self.layer = layer
self.abort = False
self.feature_count = self.layer.featureCount()
features = self.layer.getFeatures()
for feature in features:
if self.abort is True:
selected_features = self.layer.selectedFeatures()
self.abort = True
killed = QtCore.pyqtSignal()
finished = QtCore.pyqtSignal(bool)
repaint = QtCore.pyqtSignal(int)
path = 'E:\Test' + str(id) +'.png'
print 'ERROR: Writing to file %s failed' % path
# more instructions ...
# get active layer
layer = iface.activeLayer()
thread = QtCore.QThread()
worker = Worker(layer)