Python 多个工人从单个MongoDB队列获取信息
我正在用Python构建一个web爬虫程序,使用MongoDB存储一个包含所有要爬网的URL的队列。我将有几个独立的工人,将抓取网址。每当工作程序完成对URL的爬网时,它都会在MongoDB收集队列中发出请求,以获取要爬网的新URL 我的问题是,既然将有多个爬虫,我如何确保两个爬虫不会同时查询数据库并获取相同的URL进行爬虫Python 多个工人从单个MongoDB队列获取信息,python,mongodb,queue,mongodb-query,worker,Python,Mongodb,Queue,Mongodb Query,Worker,我正在用Python构建一个web爬虫程序,使用MongoDB存储一个包含所有要爬网的URL的队列。我将有几个独立的工人,将抓取网址。每当工作程序完成对URL的爬网时,它都会在MongoDB收集队列中发出请求,以获取要爬网的新URL 我的问题是,既然将有多个爬虫,我如何确保两个爬虫不会同时查询数据库并获取相同的URL进行爬虫 非常感谢您的帮助因为MongoDB中的读取是并发的,我完全理解您的意思。是的,两个工作人员可以选择同一行,修改它,然后重新保存,覆盖彼此,更不用说爬行时浪费的资源了 我相信
非常感谢您的帮助因为MongoDB中的读取是并发的,我完全理解您的意思。是的,两个工作人员可以选择同一行,修改它,然后重新保存,覆盖彼此,更不用说爬行时浪费的资源了 我相信你必须接受这样或那样你会失去表现,这是确保一致性的不幸部分 您可以使用findAndModify以独占方式拾取,因为findAndModify具有隔离性,所以它可以确保您只拾取以前未拾取的URL。问题是findAndModify由于被隔离,会减慢爬行速度 另一种方法是执行乐观锁,即在拾取数据库行后,将它们快速写入锁,这意味着在抓取重复URL时会有一些浪费,但这确实意味着您将从工作人员那里获得最大的性能和并发性
你选择哪一个需要你测试并发现哪一个最适合你。你真的试过吗?我认为MongoDB会完全满足你的要求。