我正在尝试使用多处理快速抓取一堆网址,但结果似乎没有上传到我的数据库。这是我的代码:
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()
呼叫将阻止,直到工人全部关闭。