pyqt线程-数据未保存到硬盘驱动器

时间:2019-02-07 13:00:49

标签: python multithreading qt pyqt5 qthread

我是线程编程的新手,我认为我的问题涵盖了一些我尚未了解的基本概念。 在我的代码中,我正在创建一个单独的线程,以实现一些图像转换。

self.create_samples-在这种方法中,我试图将图像写到硬盘上,并且预期结果是要有图像阵列,但是我得到的是:单个图像被保存了不到一秒的时间,并且然后立即消失(出现下一个已处理的图像)。

结果,我在目录中停留了1张图片。 我为线程使用了不同类型的计时和堆栈大小-没有帮助。

据我了解,该问题与线程使用其自己的堆栈有关,我必须以某种方式将映像从堆栈复制到硬盘。

问题是:我应该使用什么方法使线程将图像附加到当前迭代中获得的目录中,而不是单个目录中?

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)

0 个答案:

没有答案