Queue.get阻塞主要吗?

use*_*376 6 python

我知道Queue.get()python中的方法是一个阻塞函数.我需要知道我是否在main中实现了这个函数,等待一个线程设置的对象,这是否意味着所有的main都将被阻塞.

例如,如果主要包含发射器和接收器的功能,两者是否一起工作?

Mic*_*x2a 13

是 - 如果some_queue.get()在线程或main函数内调用,程序将阻塞,直到某个对象通过队列.


但是,可以使用队列以便它们不会阻塞,或者它们具有某种类型的超时:

import Queue

while True:
    try:
        data = some_queue.get(False)  
        # If `False`, the program is not blocked. `Queue.Empty` is thrown if 
        # the queue is empty
    except Queue.Empty:
        data = None

    try:
        data2 = some_queue.get(True, 3)  
        # Waits for 3 seconds, otherwise throws `Queue.Empty`
    except Queue.Empty:
        data = None
Run Code Online (Sandbox Code Playgroud)

您可以执行相同操作some_queue.put- some_queue.put(item, False)对于非阻塞队列或some_queue.put(item, True, 3)超时.如果您的队列有大小限制,Queue.Full如果没有剩余空间来追加新项目,它将抛出异常.

  • 只是为了澄清,该程序只会阻塞调用“queue.get()”函数的线程,对吗? (2认同)