使用多处理、生成器函数和抓取网址时出现问题



我正在尝试使用多处理快速抓取一堆网址,但结果似乎没有上传到我的数据库。这是我的代码:

def parse(url):
page = requests.get(url, headers=headers)
soup = BeautifulSoup(page.text, 'lxml')
MongoDBCollection.insert_one(soup)
def gen_func():
for document in otherMongoDBCollection:
yield document['URL']
def main():
pool = Pool(64)
pool.imap_unordered(parse, gen_func())
pool.terminate()
pool.join()
if __name__ == "__main__":  # Required logic expression
main()

Pool.imap_unoredred方法会立即返回,而不仅仅是在工作完成后。它的返回值是一个迭代器(因此是"i"前缀(,您需要遍历所有返回值以了解整个批次已被处理。如果您想在主流程继续之前等待所有工作完成,您可能希望改用map方法(正如您在评论中提到的(。

或者,您可以将对terminate()的调用替换为呼叫close()。这不会缩短池的工作(只是阻止提交任何新工作(。然后,join()呼叫将阻止,直到工人全部关闭。

相关内容

  • 没有找到相关文章

最新更新