Websocket 用网袋在烧瓶中排队

Websocket 用网袋在烧瓶中排队,websocket,queue,flask,scrapy,gevent,Websocket,Queue,Flask,Scrapy,Gevent,我正在使用烧瓶,Gevent和scrapy进行一个项目。基本思想是,输入一个url,它以输入作为参数启动一个爬虫进程。目前,它似乎与通过websocket传输的输出配合得很好 我很好奇,处理同时运行的多个爬虫程序的最佳方法是什么,如果两个人同时输入一个url。我认为最好的方法是使用队列系统,理想情况下,我只希望同时运行可控数量的爬虫程序 对于如何使用我正在使用的库,有什么建议吗?或者建议一种不同的方法?尝试对每个爬虫进行nodejs、webtcp(用于websockets)和异步调用。此外,一旦

我正在使用烧瓶,Gevent和scrapy进行一个项目。基本思想是,输入一个url,它以输入作为参数启动一个爬虫进程。目前,它似乎与通过websocket传输的输出配合得很好

我很好奇,处理同时运行的多个爬虫程序的最佳方法是什么,如果两个人同时输入一个url。我认为最好的方法是使用队列系统,理想情况下,我只希望同时运行可控数量的爬虫程序

对于如何使用我正在使用的库,有什么建议吗?或者建议一种不同的方法?

尝试对每个爬虫进行nodejs、webtcp(用于websockets)和异步调用。此外,一旦完成爬网,您可以使用过期密钥将其保存在临时存储器中,如memcached或redis


因此,当存在类似的爬网请求时,您可以从临时存储为其提供服务

如果爬网程序是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文件中。我更希望有更简单的方法来实现这一点,而不必改变我的应用程序的构建方式。