我有一个多线程应用程序,我需要使用全局字典来记住和处理请求。
问题是,我不应该两次执行相同的请求,所以我需要dict能够测试密钥是否存在。如果没有,插入它,如果是,则报告错误。
所有代码都在python中运行,因此GIL不应该相关。
在python中可行吗?
这里的锁会起作用,但我试图找到一种更自然的方法来解决它。
答案 0 :(得分:0)
你可以肯定地创建一个字典并在线程之间共享它,但是你应该用锁来保护对字典的每次访问(无论是读或写)。
这里的锁会起作用,但我试图找到一种更自然的方法 解决它。
使用锁等同步原语是实现涉及并发的可靠架构的自然方式。
话虽如此,确保在不同级别上可以确定某个请求没有两次。如果您使用所描述的字典进行操作,则需要在执行请求之前插入标识符。伪代码:
with lock.acquire():
if url in d:
return # do not perform request
d.[url] = True
perform_request(url)
如果请求失败,您可能希望再次从dict中删除密钥(当然不是没有获取锁定。)