get([block [,timeout]])
从队列中删除并返回一个项目。如果可选的args块为True(默认值)且timeout为None(默认值),则在必要时阻止,直到某个项可用为止。如果timeout是一个正数,它会阻止最多超时秒,如果在该时间内没有可用的项,则会引发Queue.Empty异常。否则(块为False),如果一个项立即可用,则返回一个项,否则引发Queue.Empty异常(在这种情况下忽略超时)。
如上所述。我编写了一个程序,只有一个生产者进程和六个使用者。进程之间的队列共享。
在我看来。 get_nowait()应该更快get(块) get()方法的块如何工作,任何人都可以给我一些建议。
答案 0 :(得分:1)
get
和get_nowait
之间的效果没有差异。它的行为发生了什么变化。这在文档中有详细描述。
get_nowait
与调用相同:
Queue.get(False)
这意味着调用者不会被阻止等待新数据可用。它不会使调用者“更快”。
如果您想要机会性地使用某些内容(如果可用),则使用get_nowait
方法,否则执行其他操作。
您遇到的实际速度差异可能是由于非阻塞get
与阻止内部Lock
相比,对其内部get_nowait
进行了更多访问。这将增加其成本。
您可以看到class CustomComboBox(QtGui.QComboBox):
...
def paintEvent(self, evt):
painter = QtGui.QStylePainter(self)
painter.setPen(self.palette().color(QtGui.QPalette.Text))
option = QtGui.QStyleOptionComboBox()
self.initStyleOption(option)
painter.drawComplexControl(QtGui.QStyle.CC_ComboBox, option)
textRect = QtGui.qApp.style().subControlRect(QtGui.QStyle.CC_ComboBox, option, QtGui.QStyle.SC_ComboBoxEditField, self)
painter.drawItemText(
textRect.adjusted(*((2, 2, -1, 0) if self.isShown else (1, 0, -1, 0))),
QtGui.qApp.style().visualAlignment(self.layoutDirection(), QtCore.Qt.AlignLeft),
self.palette(), self.isEnabled(),
self.fontMetrics().elidedText(self.currentText(), QtCore.Qt.ElideRight, textRect.width())
)
...
here。