表題の通り、QProgressDialogを別スレッドで実行したいのですが、安定せずに困っています。
サードパーティ製の重い処理を実行させつつ、ダイアログが固まらないようにしたいです。
やりたいことは、基本は次のようなスクリプトです。
(サードパーティ製モジュールの入る部分はコメントアウトしてあります)

# -*- coding: utf-8 -*-
import sys
from PySide import QtCore, QtGui
import time
# import third_party_module


def start_third_party_module():
    item_num = 3

    d=QtGui.QProgressDialog()
    d.setRange(0, item_num)
    d.show()

    for i in range(item_num):
        # ここに、重い処理が入る
        # third_party_module.do(i)
        d.setValue(i)
        print i
        time.sleep(2)

class MainWindow(QtGui.QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__()
        button = QtGui.QPushButton(self)
        button.setText("Click me")
        button.clicked.connect(self.pushBtn)

    def pushBtn(self):
        start_third_party_module()

def main():
    qApp = QtGui.QApplication(sys.argv)
    win = MainWindow(qApp)
    win.show()
    sys.exit(qApp.exec_())

main()

上記スクリプトを実行させると、一応ダイアログは表示されますがcancelボタンが押せないなど都合が悪いです。
サードパーティ製のモジュールをQThreadで実行することも試してみたのですが安定せず(頻繁に落ちる)、メインの中でサードパーティ製のモジュールを実行させつつ、プログレスダイアログにも触れるようにしたいと思っております。

どうかお力添えをお願いいたします。

追記:上記スクリプトが、前回は端折りすぎていたので、情報を追記しました。
よろしくお願いいたします。