我正在使用线程和队列模块在Python中编写一个简单的搜寻器。我获取一个页面,检查链接并将它们放入队列中,当某个线程完成页面处理后,它将从队列中获取下一个页面。我对已经访问过的页面使用数组,以过滤添加到队列的链接,但是如果有多个线程并且它们在不同页面上获得相同的链接,则会将重复的链接放入队列。那么,如何确定队列中是否已经有一些url以避免再次放置?
如果您不关心项目的处理顺序,请尝试在内部Queue
使用的子类set
:
class SetQueue(Queue):
def _init(self, maxsize):
self.maxsize = maxsize
self.queue = set()
def _put(self, item):
self.queue.add(item)
def _get(self):
return self.queue.pop()
正如Paul
McGuire指出的那样,这将允许在从“待处理”集中删除重复项并将其尚未添加到“已处理”集中后添加重复项。为了解决这个问题,您可以将两个集合都存储在Queue
实例中,但是由于您使用更大的集合来检查项目是否已处理,因此您也可以返回到queue
该集合以正确地订购请求。
class SetQueue(Queue):
def _init(self, maxsize):
Queue._init(self, maxsize)
self.all_items = set()
def _put(self, item):
if item not in self.all_items:
Queue._put(self, item)
self.all_items.add(item)
与单独使用一个集合相比,此方法的优点是Queue
的方法是线程安全的,因此您不需要其他锁定即可检查另一个集合。
问题内容: 我有一个名为Person的表,一个名为ID的列,如何检查ID是否已经是FOREIGN KEY,原因是我想使用以下代码进行修改: 但是如果ID已经是FOREIGN KEY,则由于有两个级联的情况,它给我以下错误“可能导致循环或多个级联路径” …如何检查此字段是否为FOREIGN KEY以避免此错误? 问题答案: 您想看一下视图 虽然还不如应有的完整。这是您想要的最终查询: 浏览此处获取更
我有一个服务器端应用程序,客户端可以请求重新加载配置。如果一个客户端请求重新加载配置,这不应该立即完成,而是延迟1分钟。如果另一个客户端也在同一分钟内请求重新加载配置,这个请求应该被忽略。 我的想法是安排一个任务与调度ExecutorService像: 如何检查LoadConfigurationTask是否已计划但尚未执行,以便在重新加载配置之前忽略进一步的请求?
以下是示例代码: (由于某种原因,这里的窗户关闭了) 回溯(最后一次调用):文件“/usr/local/lib/python2.7/dist packages/selenium/webdriver/firefox/webdriver.py”第183行中的“文件”,第1行。退出(self)文件“/usr/local/lib/python2.7/dist packages/selenium/webdr
我是Spring的新人&尝试通过创建小项目来增强我的技能。在我的新应用程序中,我想对accountNumber进行唯一性检查,不幸的是我没有成功。我想应用isPresent()方法,但当我调用它时,它并不存在。如果我得到帮助,我会很感激。 AccountrePository
问题内容: 我有ConcurrentLinkedDeque,它用于同步push / pop元素,还有一些异步任务,这些任务正在从堆栈中获取一个元素,如果该元素具有邻居,则会将其推入堆栈。 示例代码: 我想在while循环中有另外一条语句来回答问题-“执行程序中的任何任务都在工作?” 问题答案: 如果使用,没有一种干净的方法来检查所有Runnable是否都已完成。除非您在Runnable本身中构建了
本文向大家介绍如何检查PHP会话是否已经开始?,包括了如何检查PHP会话是否已经开始?的使用技巧和注意事项,需要的朋友参考一下 在PHP中,我们利用一个内置函数session_start()来启动会话。但是,PHP脚本中面临的问题是,如果我们多次执行它会引发错误。因此,在这里我们将学习如何在不调用session_start()函数两次的情况下检查会话是否启动。 有两种方法可以解决此问题。 对于低于