我目前有一个启动带有FIFO队列的线程的程序。队列不断地将数据放入队列,并且有一种方法可以从队列中获取项目。该方法获取锁定并在抓取项目后释放它。
我的问题是,我将来会遇到任何问题以及同时从队列中获取吗?将数据放入队列时是否需要添加锁?
感谢。
答案 0 :(得分:1)
默认情况下,Queue
类型会对get()
和put()
进行屏蔽调用。因此,当您进行get()
调用时,它将阻止调用并等待项目放入队列。
如果队列已满,put()
调用也将默认阻止,并等待一个插槽空闲,然后才能放置该项目。
使用block=False
或将正整数传递给timeout
可能会更改此默认行为。如果禁用阻止或设置超时,则调用将尝试正常执行,如果失败(在超时内),则会引发某些异常。
禁用阻止将立即失败,因为设置超时值将在这些秒后失败。
由于调用的默认属性是阻止的,因此不应遇到任何问题。即使您禁用阻止,仍然会有异常,您可以处理并正确控制程序的流程。因此,同时访问队列不应该存在问题,因为它是"同步"。