我需要Python中的线程安全(原子?)数据结构,以确保以下内容:
# visited : defaultdict()
if node not in visited:
assert node not in visited
visited[node] = True
答案 0 :(得分:1)
作为一种高级编程语言,Python并不特别接近支持CAS等原子操作的处理器。实际上,Python全局解释器锁会阻止您的线程同时运行。当然,这并不能消除对原子操作的需要(在检查和设置之间仍然可以调度另一个线程),但它确实使得Python对于使原子操作有价值的CPU密集型应用程序看起来非常不吸引人。
也许有一种方法可以做到; Python可以与c库文件集成。所以你可以写C来执行CAS操作。我认为它仍然会受到GIL的影响。
我通常使用Python线程来处理并发阻塞操作,例如API调用的并行化。在这些情况下,其他线程间通信机制比共享变量上的原子操作更有意义。它们更易于实现,更易于推理,并且鉴于Python的性能特征,它们足够快。