python类成员函数中的无限循环。主题?

时间:2014-10-14 19:42:23

标签: python multithreading function class

我需要实现类似这样的东西

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循环中获取控件和堆栈,但是我需要很多类的对象。 做这种事的正确方法是什么?

1 个答案:

答案 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模块。但是,如果您只是想阻止主线程阻塞,请随意坚持使用线程。只要知道一次只能运行一个线程。