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:至少捕获特定异常:队列除外。空:。