Уведомления

Группа в Telegram: @pythonsu

#1 Март 8, 2012 09:52:48

shs666
От:
Зарегистрирован: 2012-03-06
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

QThread + обычный поток = aliens :)

Привет.

В общем имеется поток Qthread, в теле которого выполняется обычный thread.
Примерно такой:

#worker.py

from PyQt4 import QtCore
import threading
from queue import Queue

class Worker(QtCore.QThread):


def __init__(self):
QtCore.QThread.__init__(self)

def run(self):
print("Started.")
self.doPrint()
print("Finished!")

def doPrint(self):
threads_count = 10
tQueue = Queue()
for num in range(100):
tQueue.put(num)
for i in range(threads_count):
t = threading.Thread(target=self.multiThreading, args=(num, tQueue))
t.start()
time.sleep(0.1)

def multiThreading(self, num, tQueue):
while True:
try:
num = tQueue.get_nowait()
except Exception:
break
print(num)
tQueue.task_done()
Когда завершается задача, Qthread должен вывести в коммандную строку “Finished”. Но этого не происходит.
И скаждым последующим перезапуском Qthread, activeThreads (активных потоков) становится на один больше… С названием “Dummy-номер”, удалось узнать, что это некие alien objects.
Предполагаю именно из-за того что эта хрень висит - Qthread не завершается и поэтому не выводит в консоль “Finished”.

Эх, незнаю доступно ли объяснил :)) Как это победить?



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version