python中的非阻塞类(分离线程)

时间:2010-10-14 15:53:55

标签: python multithreading nonblocking

我正在尝试在python中创建一种非阻塞类,但我不确定如何。

我希望一个类本身成为一个线程,与主线程分离,以便其他线程可以与它进行交互。

在一个小例子中:

#!/usr/bin/python2.4

import threading
import time

class Sample(threading.Thread):
    def __init__(self):
        super(Sample, self).__init__()
        self.status = 1
        self.stop = False

    def run(self):
        while not(self.stop):
            pass

    def getStatus(self):
        return self.status

    def setStatus(self, status):
        self.status = status

    def test(self):
        while self.status != 0:
            time.sleep(2)

#main
sample = Sample()
sample.start()
sample.test()
sample.setStatus(0)
sample.stop()

我想要的是将“sample”实例作为单独的线程运行(与主线程分离),因此,在示例中,当主线程到达sample.test()时,样本(并且只有“样本”) “)会睡2秒钟。同时,主线程将继续执行并将sample的状态设置为0.当2秒“sample”唤醒后,它将看到status = 0并退出while循环。

问题是如果我这样做,就永远不会到达sample.setStatus(0)行(创建一个无限循环)。我已经命名了线程,事实证明,通过这样做,test()由主线程运行。

我想我没有在python中获得线程......

提前谢谢

2 个答案:

答案 0 :(得分:4)

对象的run()方法是在单独的线程中执行的。当你调用sample.test()时,它会在主线程中执行,所以你得到无限循环。

答案 1 :(得分:1)

也许是这样的?

import threading
import time

class Sample(threading.Thread):
    def __init__(self):
        super(Sample, self).__init__()
        self.stop = False

    def run(self):
        while not(self.stop):
            print('hi')
            time.sleep(.1)

    def test(self):
        print('testing...')
        time.sleep(2)

#main
sample = Sample()
sample.start()      # Initiates second thread which calls sample.run()
sample.test()       # Main thread calls sample.test
sample.stop=True    # Main thread sets sample.stop
sample.join()       # Main thread waits for second thread to finish