0
我已经在另一个线程中对一个项目实施了一些线程,但是评论和问题已经逐渐脱离了原文的主题,所以我认为最好的做法是提出一个新问题。问题是这样的。我希望我的程序在命令行指定的迭代次数后停止迭代。我传递Queue.Queue(MAXSIZE = 10),在下面的代码段:队列(maxsize =)不工作?
THREAD_NUMBER = 5
def main():
queue = Queue.Queue(maxsize=sys.argv[2])
mal_urls = set(make_mal_list())
for i in xrange(THREAD_NUMBER):
crawler = Crawler(queue, mal_urls)
crawler.start()
queue.put(sys.argv[1])
queue.join()
这里是运行功能:
class Crawler(threading.Thread):
def __init__(self, queue, mal_urls):
self.queue = queue
self.mal_list = mal_urls
self.crawled_links = []
threading.Thread.__init__(self)
def run(self):
while True:
self.crawled = set(self.crawled_links)
url = self.queue.get()
if url not in self.mal_list:
self.crawl(url)
else:
print("Malicious Link Found: {0}".format(url))
self.queue.task_done()
self.crawl是,做一些函数lxml.html解析,然后调用另一个函数,做一些字符串的链接处理使用LXML解析,然后调用self.queue.put(链接),像这样:
def queue_links(self, link, url):
if link.startswith('/'):
link = "http://" + url.netloc + link
elif link.startswith("#"):
return
elif not link.startswith("http"):
link = "http://" + url.netloc + "/" + link
# Add urls extracted from the HTML text to the queue to fetch them
if link not in self.crawled:
self.queue.put(link)
else:
return
有谁那个地方我可能有搞砸了应该导致程序永远不会停止运行,以及为什么已经被抓取的链接不被识别为这样?
谢谢,指定时停止。任何想法为什么链接被重新抓取,即使它们被放入要忽略的链接列表中? – Stev0 2010-11-01 04:51:34