Python中的非阻塞类(分离线程)
我正在尝试在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()时,只有“sample”会睡眠2秒。而主线程会继续执行,并把sample的状态设置为0。当“sample”在2秒后醒来时,它会看到状态是0,然后退出循环。
问题是,如果我这样做,sample.setStatus(0)这一行代码永远不会被执行(导致无限循环)。我给线程命名后发现,test()实际上是由主线程运行的。
我想我对Python中的线程理解得不太好……
谢谢你们的帮助!
2 个回答
2
也许可以这样做?
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
4
这个对象的 run() 方法是在一个单独的线程中执行的。当你调用 sample.test() 时,它是在主线程中运行的,所以你会看到无限循环的情况。