我读到Python中的列表提供了原子操作。我有 2 个使用列表的线程:一个线程遍历列表以检索正则表达式字符串以应用于某些对象,另一个线程通过添加和删除其中的元素来定期更新列表。如果我希望第一个线程的列表更新是原子的,我应该在两个线程中使用
threading.Lock
吗?
“通过添加和删除元素” - 如果您的意思是它正在执行
.append()
和 .remove()
或诸如此类的操作,那么绝对有可能另一个线程可以在这些调用之间运行,并且您会看到半更新的内容。
但是,据我所知,
target_list[:] = new_contents
(即用另一个切片替换列表的整个切片)是原子的,并且您不需要为锁烦恼。