这是关于多处理的官方文档。Queue.get
获取([块[,超时]])
从队列中删除并返回项目。如果可选args块为True(默认值),超时为None(无默认值),必要时阻止,直到项目为
available
。如果超时是一个正数,它最多阻止超时秒,并引发队列。如果在该时间内没有可用的项目,则为空异常。否则(块为False),如果其中一个是immediately available
,则返回一个项,否则引发Queue.Empty异常(超时被忽略在这种情况下)。
问题是available
和immediately available
之间有什么区别
提前谢谢。😄
必要时阻止,直到某个项目可用
这只是意味着当您发出请求时,Queue
是空的,除非您传递参数block = False
或设置一些Timeout
,否则在向Queue
添加项之前,它将被阻止。
立即可用
这意味着,当您提出请求时,Queue
上有一些项目,它将立即返回。
在设置了block=True
的第一种情况下,"available"
表示队列中存在项目并准备由Queue.get()
移除。关键是线程/进程将阻止,直到有一个项目准备从队列中删除。
在第二种情况下,block=False
,因此如果队列中没有项目(队列上没有项目是"immediately available"
),调用线程将而不是阻塞。相反,CCD_ 15将引发CCD_ 16以表示队列中没有要读取的内容。您的应用程序需要处理该异常,可能需要执行其他任务,然后稍后重试。