Python 为什么B类不每1秒打印一次
根据下面的代码Python 为什么B类不每1秒打印一次,python,multithreading,queue,Python,Multithreading,Queue,根据下面的代码 from threading import Thread import Queue from time import sleep class myClassA(Thread): def __init__(self,num,q): Thread.__init__(self) self.daemon = True self.num = num self.start() def run(self):
from threading import Thread
import Queue
from time import sleep
class myClassA(Thread):
def __init__(self,num,q):
Thread.__init__(self)
self.daemon = True
self.num = num
self.start()
def run(self):
while True:
self.num = self.num+1
q.put(self.num)
sleep(5)
class myClassB(Thread):
def __init__(self,num,q):
Thread.__init__(self)
self.daemon = True
self.num = num
self.start()
def run(self):
while True:
self.num = q.get()
print self.num
sleep(1)
num = 0
q = Queue.Queue()
myClassA(num,q)
myClassB(num,q)
while True:
pass
为什么B类不每秒打印一次?我希望B类打印五个1,然后是五个2等。q.get是一个阻塞函数吗?是的,Queue.get默认是阻塞的。从:
如果optional args block为true,timeout为None,则在项目可用之前,如有必要,进行阻塞
我的。因为q.get被阻塞,所以它不会返回,直到另一个线程在队列中放入了要获取的内容
即便如此,从队列中删除一个项目意味着下次它将不在那里。q、 get不会将号码留在那里,以便一次又一次地提取
相反,如果您要使用q.getFalse或用于防止阻塞,则会引发一个空异常。再次感谢RTFM。这样做似乎得到了预期的效果try:self.num=q.getFalse print self.num except:print nothing in queuesleep1@moonraker:至少捕获特定异常:队列除外。空:。