我开始一些线程,但想知道哪个线程完成了:
...
...
def start_ten_threads(self):
self.workers = []
for i in range(0, 10):
self.workers.append(thread_worker(i, self))
...
...
for k in range(0, 10):
self.workers[k].finished.connect(lambda: self.print_finished("WorkerThread %d finished" % k))
self.workers[k].start()
@Slot(str)
def print_finished(self, str):
print(str)
对于每个线程,我得到相同的数字9(k的最后一个值)。为什么?我可以通过信号“完成”以这种方式使用参数吗?我已经阅读了一些有关QSignalMapper的内容。这里还有别的办法吗?
如果我使用self.sender(),我会指向该线程,但是我不知道它是哪个线程号。
对于lambda,请尝试:
lambda k=k: self.print_finished("WorkerThread %d finished" % k)
^^^
使用此语法,k
lambda将捕获并使用创建lambda时的值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句