你能同时进入队列吗?

时间:2016-08-13 08:49:54

标签: python multithreading queue locking

我目前有一个启动带有FIFO队列的线程的程序。队列不断地将数据放入队列,并且有一种方法可以从队列中获取项目。该方法获取锁定并在抓取项目后释放它。

我的问题是,我将来会遇到任何问题以及同时从队列中获取吗?将数据放入队列时是否需要添加锁?

感谢。

1 个答案:

答案 0 :(得分:1)

默认情况下,Queue类型会对get()put()进行屏蔽调用。因此,当您进行get()调用时,它将阻止调用并等待项目放入队列。

如果队列已满,put()调用也将默认阻止,并等待一个插槽空闲,然后才能放置该项目。

使用block=False或将正整数传递给timeout可能会更改此默认行为。如果禁用阻止或设置超时,则调用将尝试正常执行,如果失败(在超时内),则会引发某些异常。

禁用阻止将立即失败,因为设置超时值将在这些秒后失败。

由于调用的默认属性是阻止的,因此不应遇到任何问题。即使您禁用阻止,仍然会有异常,您可以处理并正确控制程序的流程。因此,同时访问队列不应该存在问题,因为它是"同步"。