【问题标题】:Using QThreadPool with QRunnable in PyQt4在 PyQt4 中使用 QThreadPool 和 QRunnable
【发布时间】:2015-06-16 15:52:46
【问题描述】:

考虑下面的代码 sn -p

class Worker(QtCore.QRunnable):
    def __init__(self):
        super(Worker, self).__init__()

    def run(self):
        print('Running Worker')

class Tasks(QtCore.QObject):
    def __init__(self):
        super(Tasks, self).__init__()
        self.pool = QtCore.QThreadPool.globalInstance()
        self.pool.setMaxThreadCount(2)

    def start(self):
        for task in range(3):
            worker = Worker()
            self.pool.start(worker)
        self.pool.waitForDone()

def main():
    prefix_path = os.environ['QGIS_PREFIX_PATH']
    QgsApplication.setPrefixPath(prefix_path, True)
    QgsApplication.initQgis()
    tasks = Tasks()
    tasks.start()

我收到以下错误

_original_runnable_init(self, *args, **kwargs)
TypeError: keyword arguments are not supported

创建工作对象有什么问题?

【问题讨论】:

  • 不要复制编辑错误消息。发布整个回溯。

标签: python pyqt pyqt4


【解决方案1】:

不知道 QGis 初始化有什么问题,但以下代码在我的机器上按预期工作:

from PyQt4 import QtCore

class Worker(QtCore.QRunnable):
    def __init__(self):
        super(Worker, self).__init__()

    def run(self):
        print('Running Worker')

class Tasks(QtCore.QObject):
    def __init__(self):
        super(Tasks, self).__init__()
        self.pool = QtCore.QThreadPool.globalInstance()
        self.pool.setMaxThreadCount(2)

    def start(self):
        for task in range(3):
            worker = Worker()
            self.pool.start(worker)
        self.pool.waitForDone()

if __name__ == '__main__':
    tasks = Tasks()
    tasks.start()

它给了我以下输出:

Running Worker
Running Worker
Running Worker

【讨论】:

    猜你喜欢
    • 2020-08-18
    • 2013-12-28
    • 1970-01-01
    • 2015-12-18
    • 2013-12-09
    • 2015-12-30
    • 2020-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多