列表是线程安全的

我注意到它经常被build议使用带有多个排队的队列,而不是列表和.pop()。 这是因为列表不是线程安全的,还是其他原因?

列表本身是线程安全的。 在CPython中,GIL可以防止对它们的并发访问,其他的实现会在列表实现中使用细粒度的锁或同步的数据types。 但是,虽然列表本身不能通过尝试同时访问而损坏,但列表的数据不受保护。 例如:

L[0] += 1 

如果另一个线程执行相同的操作,则不能保证实际增加L [0],因为+=不是primefaces操作。 (Python中非常less的操作实际上是primefaces操作,因为它们中的大多数操作可能会导致任意的Python代码被调用。)应该使用队列,因为如果您只是使用不受保护的列表,则可能因为种族而获取或删除错误的项目条件。

为了澄清托马斯的优秀答案中的一点,应该提到append() 线程安全的。

这是因为,一旦我们写入数据,就不用担心读取的数据会在同一个地方。 append()操作不读取数据,只将数据写入列表。

这里有一个 list操作的例子的全面但非详尽的列表,以及它们是否是线程安全的。 希望在这里得到关于obj in a_list语言结构的答案。