我有一个多线程应用程序,在其中我需要使用全局指令来记住和处理请求。
问题是,我不应该两次执行相同的请求,因此我需要使用字典才能测试 key 是否存在。如果不是,请插入它,如果是,则报告错误。
所有代码都在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中删除 key (当然,不是没有获得锁)。
关于python - 有没有一种方法可以在python中对dict执行测试和设置操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28412522/