我正在尝试在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中获得线程......
提前谢谢
答案 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