Я новичок в программировании потоков, и я считаю, что мой вопрос охватывает некоторые базовые концепции, которые я не уловил.В моем коде я создаю отдельный поток для реализации некоторого преобразования изображения.
self.create_samples - в этом методе я пытаюсь записать изображение на жесткий диск, и ожидаемый результат должен иметь массивизображений, но я получаю следующее: одно изображение сохраняется в течение доли секунды, а затем сразу исчезает (появляется следующее обработанное изображение).
В результате я застрял с одним изображением в моем каталоге,Я играл с разными типами времени и размера стека для потока - ничего не помогло.
Как только я понял, проблема связана с тем, что поток использует свой собственный стек, и мне нужно скопировать изображениекак-то из стека на жесткий диск.
Вопрос в том, какой подход я должен использовать, чтобы поток добавлял изображения в каталог, а не в один, полученный на текущей итерации?
class SamplesWorker(QObject):
def __init__(self, function, *args, **kwargs):
super(SamplesWorker, self).__init__()
self.function = function
self._run = True
self.args = args
self.kwargs = kwargs
self.start.connect(self.run)
self.mutex = QMutex()
self.delay = 1000
start = pyqtSignal(int)
finished = pyqtSignal(int)
value_changed = pyqtSignal(int)
@pyqtSlot(int)
def run(self, some_string_arg):
while self._run:
try:
self.mutex.lock()
self.function(*self.args, **self.kwargs)
self.mutex.unlock()
self.value_changed.emit(1)
QtCore.QThread.msleep(self.delay)
except: pass
Как все это инициализировать:
self.csQThread1 = QtCore.QThread()
self.csQThread1.finished.connect(self.csQThread1.deleteLater)
self.csWorker1 = SamplesWorker(self.create_samples)
self.csWorker1.moveToThread(self.csQThread1)
self.csWorker1.value_changed.connect(self.create_samples_set_pb_value)
self.csQThread1.start()
self.csWorker1.start.emit(1)
def create_samples(self):
#some calculations
#...
cv2.imwrite(dst,image)