我目前有一个场景,我需要从多个网页中提取内容,处理内容,插入MongoDB。我在思考什么是最好的方法。它让我有点困惑,因为有很多方法可以解决这个问题。
我可以做一些这样的事情:
jobs = group(visit.s(i) for i in payload)
res = ( jobs|process.s()|save.s())()
据我所知,这将访问一个页面,然后处理它,然后保存它。所有完成异步(可能同时?)。这种方式完全异步并且实际上没有等待,但每个项目都是单独插入到MongoDB中。
另一方面,我可以使用回调:
jobs = group(visit.s(i) for i in payload)
res = chord( jobs|process.s(),save.s())()
这将执行aync提取和处理,但是等待所有任务完成,然后异步保存结果,这将导致批量插入MongoDB。
所以我想知道是否有人有类似的经历,而且这是一种更好的方法。我应该完全异步吗?或者在那里有一些同步代码。
另外还有一些问题可能是使用分块而不是单页任务的任何评论都会很棒。
由于
答案 0 :(得分:0)
相关question,其中也包含答案。没有直接相关,但它的主旨是大量插入仍然只是一个循环中的单个插入,并且Mongo可以处理大量的连接,所以它似乎没关系,async应该工作正常。