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