【发布时间】:2018-06-18 03:16:21
【问题描述】:
我想在给定文章中搜索预定义的关键字列表,如果在文章中找到关键字,则将分数加 1。我想使用多处理,因为预定义的关键字列表非常大 - 10k 个关键字和文章数量是 100k。
我遇到了this 的问题,但它没有解决我的问题。
我尝试了这个实现,但得到了None。
keywords = ["threading", "package", "parallelize"]
def search_worker(keyword):
score = 0
article = """
The multiprocessing package also includes some APIs that are not in the threading module at all. For example, there is a neat Pool class that you can use to parallelize executing a function across multiple inputs."""
if keyword in article:
score += 1
return score
我尝试了以下两种方法,但得到了三个None。
方法一:
pool = mp.Pool(processes=4)
result = [pool.apply(search_worker, args=(keyword,)) for keyword in keywords]
方法二:
result = pool.map(search_worker, keywords)
print(result)
实际输出: [None, None, None]
预期输出: 3
我想将预定义的关键字列表和文章一起发送给工作人员,但我不确定我是否朝着正确的方向前进,因为我之前没有多处理经验。
提前致谢。
【问题讨论】:
-
为什么不使用 ElasticSearch 作为您的搜索引擎?
-
我不确定如何使用 ElasticSearch 执行此操作。我想根据关键字列表和索引文章计算每篇文章的置信度分数以及置信度分数。
-
ElasticSearch 可以轻松做到这一点!你真的应该试试
-
您的情况有不同的解决方案。一,你可以有一个共享内存,就像一个数据库。 Redis 真的很简单,而且效果很好。根据您的规模计划和计划的复杂性,采用一些 map-reduce 技术。
-
您的代码在我运行时运行良好(python3.5)。 (我得到 [1, 1, 1],你只需要一个全局计数或对结果求和)。你还记得使用
if __name__ == '__main__'运行方法1和方法2吗?
标签: python python-3.x python-2.7 multiprocessing python-multiprocessing