有没有办法对python中的dict进行test-and-set操作?

Is there a way to perform test-and-set operation on dict in python?

我有一个多线程应用程序,我需要在其中使用全局字典来记住和处理请求。

问题是,我不应该执行相同的请求两次,所以我需要 dict 来测试密钥是否存在。没有就插入,有就报错

所有代码都在 python 中运行,因此 GIL 不应该是相关的。

这在 python 可行吗?

在这里锁可以工作,但我正在尝试找到一种更自然的方法来解决它。

你当然可以创建一个字典并在线程之间共享它,但是你应该用锁保护每个对字典的访问(无论是读还是写)。

Here lock would work but I am trying to find a more natural way to solve it.

使用锁等同步原语实现涉及并发的可靠架构的自然方式。

话虽这么说,但可以在多个层面上确保某个请求没有被重复提出。如果您使用描述的字典来执行此操作,则需要在 执行请求之前 插入标识符。伪代码:

with lock.acquire():
    if url in d:
        return # do not perform request
    d.[url] = True

perform_request(url)

如果请求失败,您可能想再次从 dict 中删除密钥(当然不是不获取锁)。