我使用python3 urllib3来构建一个爬虫来下载多个urls。
在我的主要活动中,我使用创建了20个线程,这是我的Downloader类的同一个(一个)实例,它使用PoolManager的一个实例
def __init__(self):
self.manager = PoolManager(num_pools=20)我一次又一次地提交同一个url,我在日志中看到它创建了许多到同一个域的连接。我试图限制池(num_pools=1)的数量,但它仍然在同一个url上创建多个连接。在文档中,我了解到,如果使用到同一域的其他连接,PoolManager将创建一个新的连接。
我想限制连接到单个域的数量。使用最多两个不同的连接是正常浏览器所使用的,因此它是安全的。我怎么能这么做?
发布于 2016-07-16 14:00:34
PoolManager(num_pools=20)将将池限制为20个缓存的ConnectionPools实例,每个实例通常代表一个域。因此,您实际上限制在20个缓存域池,每个域的连接更深一层。
我们可以用ConnectionPool指定每个maxsize=20的限制。由于您使用池来节流您的爬虫,您还需要使用block=True,这将防止创建超出限制的额外连接。使用block=False (默认),将根据需要创建更多的连接,但在maxsize之外的连接将不会保存以供重用。
总之,你可能想:
def __init__(self):
self.manager = PoolManager(maxsize=20, block=True)更多一些关于哪些参数可用的文档:
https://stackoverflow.com/questions/38410661
复制相似问题