最近在用多进程爬微博的api, getPage 函数是一次api请求一个页面,一次api请求返回10条个人动态,然后写入到mongodb函数库里面。
我的逻辑是例如这个人的微博量很多,例如有300多页,我就想着多进程一次请求9个页面,然后赞同几秒,然后继续一次请求9个页面,循环直到请求完
如下面这里最后不是应该爬取到 993=243条动态么,但是我mongodb数据库显示才100条,而且有好几次数据都都对不上,我有点奇怪,apply_async, 但是join了不是会等待所有进程结束的么,为什么最后的数量对不上呢?
if __name__ == '__main__':
p = Pool(9)
x = 1
y = 10
while y <= 30:
for i in range(x,y):
p.apply_async(getPage, args = (i,))
print('9 page done!')
time.sleep(random.randint(3,5)+random.random())
x += 10
y += 10
p.close()
p.join()
print('Done!')