我有一个标题为tables
的函数,它执行一些耗时的任务。我需要在一个单独的线程中调用此函数。但是,对函数move
的调用必须是顺序的。例如,只有在前一个线程完成时才应创建下一个线程。
以下是示例代码:
move
以上代码打印以下输出:
import sys
import time
from PyQt4.QtGui import *
from threading import Thread
from thread import start_new_thread
class Test():
def __init__(self):
self.length = 10
def move(self, point):
print '\nMove ',
points = []
i = 1
while True:
value = i * point
points.append(value)
if len(points) > self.length:
break
time.sleep(0.1)#100 ms
print value,
i += 1
test = Test()
def move_test():
points = [3, 5, 7]
def move_test_thread(points):
for point in points:
thread = Thread(target=test.move, args=(point,))
thread.start()
thread.join()
start_new_thread(move_test_thread, (points,))
a = QApplication(sys.argv)
w = QWidget()
w.resize(320, 240)
w.setWindowTitle("Hello World!")
move_button = QPushButton('move', w)
move_button.clicked.connect(move_test)
move_button.resize(move_button.sizeHint())
move_button.move(40, 80)
w.show()
sys.exit(a.exec_())
不幸的是,它没有为最后一点执行线程,即7.为什么会出现这种奇怪的行为?我错过了一些明显的东西吗?