我需要实现类似这样的东西
def turnOn(self):
self.isTurnedOn = True
while self.isTurnedOn:
updateThread = threading.Thread(target=self.updateNeighborsList, args=())
updateThread.daemon = True
updateThread.start()
time.sleep(1)
def updateNeighborsList(self):
self.neighbors=[]
for candidate in points:
distance = math.sqrt((candidate.X-self.X)**2 + (candidate.Y-self.Y)**2)
if distance <= maxDistance and candidate!=self and candidate.isTurnedOn:
self.neighbors.append(candidate)
print self.neighbors
print points
这是一个类成员函数,在updateNeighborsList
之前每隔一段时间调用self.isTurnedOn == True
函数。
当我创建类对象并调用turnOn
函数时,所有后面的语句都没有被执行,它在while循环中获取控件和堆栈,但是我需要很多类的对象。
做这种事的正确方法是什么?
答案 0 :(得分:1)
我认为在调用Thread
时创建单个turnOn
会更好,并且在该线程内发生循环:
def turnOn(self):
self.isTurnedOn = True
self.updateThread = threading.Thread(target=self.updateNeighborsList, args=())
self.updateThread.daemon = True
self.updateThread.start()
def updateNeighborsList(self):
while self.isTurnedOn:
self.neighbors=[]
for candidate in points:
distance = math.sqrt((candidate.X-self.X)**2 + (candidate.Y-self.Y)**2)
if distance <= maxDistance and candidate!=self and candidate.isTurnedOn:
self.neighbors.append(candidate)
print self.neighbors
print points
time.sleep(1)
但请注意,由于Global Interpreter Lock,在线程内部进行数学计算并不能提高CPython的性能。为了并行使用多个内核,您需要使用multiprocessing
模块。但是,如果您只是想阻止主线程阻塞,请随意坚持使用线程。只要知道一次只能运行一个线程。