有没有办法在python中对dict执行测试和设置操作?

时间:2015-02-09 14:50:45

标签: python multithreading dictionary

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

问题是,我不应该两次执行相同的请求,所以我需要dict能够测试密钥是否存在。如果没有,插入它,如果是,则报告错误。

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

在python中可行吗?

这里的锁会起作用,但我试图找到一种更自然的方法来解决它。

1 个答案:

答案 0 :(得分:0)

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

  

这里的锁会起作用,但我试图找到一种更自然的方法   解决它。

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

话虽如此,确保在不同级别上可以确定某个请求没有两次。如果您使用所描述的字典进行操作,则需要在执行请求之前插入标识符。伪代码:

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

perform_request(url)

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