2015-06-15 2 views
2

Рассмотрим следующий фрагмент кодаИспользование QThreadPool с QRunnable в PyQt4

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 

Что случилось с созданием Worker объекта?

+0

Не копировать -edit сообщения об ошибках. Отправьте весь трассу. – ekhumoro

ответ

2

Не знаю, что случилось с инициализацией 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 
Смежные вопросы