gpt4 book ai didi

python-2.7 - python-boilerpipe 挂起多处理

转载 作者:行者123 更新时间:2023-12-04 01:14:36 27 4
gpt4 key购买 nike

我正在尝试运行 boilerpipe使用 Python multiprocessing .这样做是为了解析来自多个来源的 RSS 提要。问题是它在处理一些链接后卡在其中一个线程中。如果我删除池并在循环中运行它,则整个流程都有效。

这是我的多处理代码:

proc_pool = Pool(processes=4)
for each_link in data:
proc_pool.apply_async(process_link_for_feeds, args=(each_link, ), callback=store_results_to_db)
proc_pool.close()
proc_pool.join()

这是我的 boilerpipe正在内部调用的代码 process_link_for_feeds() :
def parse_using_bp(in_url):
extracted_html = ""
if ContentParser.url_skip_p.match(in_url):
return extracted_html
try:
extractor = Extractor(extractor='ArticleExtractor', url=in_url)
extracted_html = extractor.getHTML()
del extractor
except BaseException as e:
print "Something's wrong at Boilerpipe -->", in_url, "-->", e
extracted_html = ""
finally:
return extracted_html

我不知道为什么它挂了。 proc_pool有什么问题吗?代码?

最佳答案

你可以试试线程吗?多处理基本上适用于您 CPU bound .此外,锅炉管道已经 includes protection when using threading这表明它在多处理中也可能需要保护。

如果你真的需要 mp,我会试着弄清楚如何修补样板。

我猜这将是使用线程的直接替换。它使用 multiprocessing.pool.ThreadPool (这是一个 "fake" multiprocessing pool )。唯一的变化来自 Pool(..)multiprocessing.pool.ThreadPool(...)问题是我不确定样板多线程测试是否会检测到线程池 () 具有 activeCount() > 1 .

import multiprocessing
from multiprocessing.pool import ThreadPool # hidden ThreadPool class

# ...
proc_pool = ThreadPool(processes=4) # this is the only difference
for each_link in data:
proc_pool.apply_async(process_link_for_feeds, args=(each_link, ), callback=store_results_to_db)
proc_pool.close()
proc_pool.join()

关于python-2.7 - python-boilerpipe 挂起多处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20420224/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com