【发布时间】:2021-12-12 18:21:38
【问题描述】:
我已经阅读了多处理包和线程模块,但我不太确定如何在我的情况下使用它,尽管我仍然认为我可以从实现它中受益。
我目前正在编写一个处理和抓取一堆 HTML 文件的管道。我的清理方法遍历所有 HTML 文件并处理它们,方法是调用另一个提取数据并返回 pandas 数据框的方法。清理方法当前等待一个文件完成解析,这就是为什么我认为多处理在这里会有所帮助。
我不太确定线程或多处理是否是正确的选择,但我认为由于任务受 CPU 限制,多处理应该是完美的
这就是我的代码现在的样子:
def get_clean_df(self):
# iterate through all existing html files and parse them
for filepath in glob.glob("../data/source/*/*.html"):
# expand existing dataframe with the newly parsed result
result = pd.concat([result, self._extract_df_from_html(filepath)])
return result
感谢大家的帮助
【问题讨论】:
-
你能把你的函数
_extract_df_from_html移到你的类实例之外吗? -
很遗憾没有,因为我在另一个脚本中调用实例及其主要方法
-
所以答案是你不能,因为你的实例不能在多个进程之间共享。如果您的任务受 CPU 限制,即使您可以共享内存,使用线程也不是正确的选择。
-
还有什么替代方案
-
在类外创建一个辅助函数
extract_df_from_html,返回清理后的数据框。
标签: python pandas multiprocessing