Форум сайта python.su
Помогите разобраться c Qt'шными потоками.
И так, по нажатию кнопки стартует функция, которая запускает потоки. После того как поток отработал он должен внести изменения в соответствующее поле в таблице.
В тестовом варианте ‘i’ из потока должно выводиться через функцию test. Но это не работает. Подскажите плиз как это можно сделать?
def chk_upd(self): #
def test(q):
print q
self.threads = []
for i in range(self.tableWidget.rowCount()):
name = self.tableWidget.item(i,0).text()
thread = ChechUpdThread()
self.threads.append(thread)
QObject.connect(thread,SIGNAL('test'),test)
thread.start()
class ChechUpdThread(QThread):
def __init__(self, parent=None):
super(ChechUpdThread, self).__init__(parent)
def run(self):
#Тут код, который возвращяет 1 или 0
i = 1
self.emit(SIGNAL('test'), i)
Офлайн
Так, с одной проблемой я разобрался. Теперь вопрос в следующем. Проконсультируйте по поводу QThreadPool и QRunnable. Как их правильно использовать?
Сперва сам поток:
class CheckUpdThread(QRunnable, QObject):
result = Signal(object)
def __init__(self, queue, parent=None):
super(CheckUpdThread, self).__init__(parent)
QObject.__init__(self)
self.queue = queue
def run(self):
while not self.queue.empty():
item = self.queue.get()
self.result.emit(('Start',item[1]))
url = PyBase().getUrlByName(item[0])
checkUpdate = WebSite().checkUpd(item[0], url)['stats']
if checkUpdate == '0':
res = (0,item[1])
elif checkUpdate == '1':
res = (1,item[1])
self.result.emit(res)
thread = CheckUpdThread(self.queue)
thread.result.connect(test)
q = QThreadPool()
for i in range(q.maxThreadCount()):
q.start(thread)
Офлайн