私は次のコードを持っています:
from PySide.QtCore import *
import time
class GUI(object):
    IDLIST = [i for i in xrange(20)]
    UNUSEDIDS = [i for i in xrange(20)]
    def __init__(self):
        print "GUI CLASS INITIALIZED!"
        worker = Worker()
        worker2 = Worker2()
        threadpool = QThreadPool()
        threadpool.setMaxThreadCount(10)
        for i in xrange(5):
            #Alternate between the two
            #threadpool.start(worker)
            #worker2.start()
    @classmethod
    def delegator(self):
        """Irrelevant to the question, I need this method for something else"""
        USEDIDS = []
        toUse = self.UNUSEDIDS[0]
        USEDIDS.append(toUse)
        self.UNUSEDIDS.pop(0)
        return toUse
class Worker(QRunnable):
    def __init__(self, parent=None):
        super(Worker, self).__init__(parent)
    def run(self):
        #idInUse = getattr(GUI, "delegator")
        idInUse = GUI.delegator()
        print "Hello world from QRunnable", idInUse
        #time.sleep(5)
class Worker2(QThread):
    def __init__(self, parent=None):
        super(Worker2, self).__init__(parent)
    def run(self):
        idInUse = GUI.delegator()
        print "Hello world from QThread", idInUse    
s = time.time()
GUI()
print "Done in %s" % ((time.time()-s) * 1000)
望ましい効果はコードから明らかだと思います。「QThread/QRunnableのHelloworld」を表示したいのですが。マルチスレッドアプリケーションを作成しているので、GUI__init__部分に、並行スレッドを開始するループがあります。
重要なのは、QRunnableを使用すると問題なく動作するということです。指定した5つのスレッドすべてが同時に実行されます。ただし、QThreadの場合は、そうではありません。代わりに、次のエラーが発生します。
QThread:スレッドの実行中に破棄されました
そして、それはまったく実行されません。
通常、QRunnableを使用してもかまいませんが、QObjectから派生したものではなく(そのため、内部で構築できますが、信号を直接送信することはできません)、また、私がひどく必要とQObject()するメソッドもありません。.stop()グーグルは、QRunnableの実行を停止する方法がないことを明らかにしましたか?一方、QThreadには、私が必要とするこれらのメソッドの両方があります。
ですから、私の質問は、複数の同じQThreadを同時に実行する方法、またはQRunnableの実行を終了する方法のいずれかだと思います。
(Pythonの組み込みスレッドモジュールは問題外であることにも注意してください)