Websocket 用网袋在烧瓶中排队
我正在使用烧瓶,Gevent和scrapy进行一个项目。基本思想是,输入一个url,它以输入作为参数启动一个爬虫进程。目前,它似乎与通过websocket传输的输出配合得很好 我很好奇,处理同时运行的多个爬虫程序的最佳方法是什么,如果两个人同时输入一个url。我认为最好的方法是使用队列系统,理想情况下,我只希望同时运行可控数量的爬虫程序 对于如何使用我正在使用的库,有什么建议吗?或者建议一种不同的方法?尝试对每个爬虫进行nodejs、webtcp(用于websockets)和异步调用。此外,一旦完成爬网,您可以使用过期密钥将其保存在临时存储器中,如memcached或redisWebsocket 用网袋在烧瓶中排队,websocket,queue,flask,scrapy,gevent,Websocket,Queue,Flask,Scrapy,Gevent,我正在使用烧瓶,Gevent和scrapy进行一个项目。基本思想是,输入一个url,它以输入作为参数启动一个爬虫进程。目前,它似乎与通过websocket传输的输出配合得很好 我很好奇,处理同时运行的多个爬虫程序的最佳方法是什么,如果两个人同时输入一个url。我认为最好的方法是使用队列系统,理想情况下,我只希望同时运行可控数量的爬虫程序 对于如何使用我正在使用的库,有什么建议吗?或者建议一种不同的方法?尝试对每个爬虫进行nodejs、webtcp(用于websockets)和异步调用。此外,一旦
因此,当存在类似的爬网请求时,您可以从临时存储为其提供服务如果爬网程序是gevent作业,您可以使用池 Group的子类提供了限制并发性的方法的池:如果池中的greenlet数量已经达到限制,则其spawn方法将阻塞,直到有一个空闲槽为止 伪代码:
crawler_pool = Pool(10)
def spawncrawler(url):
def start():
crawler_pool.spawn(crawl, url) # blocks when max is reached.
gevent.spawn(start)
# give a response to the browser. this will always succeed because
# i put the spawning of the crawler in a separate greenlet so if max
# 10 crawlers is reached the greenlet just holds on untill there is space
# and client can get default response..
你考虑过使用nodejs吗?你可以对每个爬虫进行异步调用。是的,为了这个特殊的爬虫目的,我不需要担心内容变化太多。因此,我将爬网的所有解析结果保存到json文件中。我更希望有更简单的方法来实现这一点,而不必改变我的应用程序的构建方式。