Python check-if-exists-and-update原子操作

问题描述 投票:-1回答:1

我需要Python中的线程安全(原子?)数据结构,可以确保以下内容:

# visited : defaultdict()

if node not in visited:
    assert node not in visited
    visited[node] = True
python multithreading python-3.x
1个回答
1
投票

作为一种高级编程语言,Python并不特别接近支持CAS等原子操作的处理器。实际上,Python全局解释器锁会阻止您的线程同时运行。当然,这并不能消除对原子操作的需要(在检查和设置之间仍然可以调度另一个线程),但它确实使得Python对于使原子操作有价值的CPU密集型应用程序看起来非常不吸引人。

也许有一种方法可以做到这一点; Python可以与c库文件集成。所以你可以写C来执行CAS操作。我认为它仍然会受到GIL的影响。

我通常使用Python线程来处理并发阻塞操作,例如API调用的并行化。在这些情况下,其他线程间通信机制比共享变量上的原子操作更有意义。它们更易于实现,更易于推理,并且鉴于Python的性能特征,它们足够快。

© www.soinside.com 2019 - 2024. All rights reserved.