在Python 3.7中使用自定义函数进行多处理时出现问题



我创建了一个自定义函数,通过Python 3.7中的正则表达式来清理大型文本体。我正在使用jupyter笔记本6.0.3

import numpy as np
import pandas as pd
import re
import string
def pre_process(arr):
legal_chars = string.ascii_letters + string.punctuation + string.digits + string.whitespace + "äÄöÖüÜ"
while "  " in arr: # removes unnecessary empty spaces
arr = arr.replace("  ", " ")
while "nn" in arr: # removes unnecessary new lines
arr = arr.replace("nn", "n") 
for char in arr: # removes illegal charachters
if char not in legal_chars:
arr=arr.replace(char,"")    
pattern4 = r"[d]+W[d]+" # remove long numbers separated with non-digit
pattern4_1 = r"[d]+W[d]+"
arr = re.sub(pattern4, '1', arr)
arr = re.sub(pattern4_1, '', arr)
pattern5 = r"W[d]+W[d]+W" # remove long numbers enclosed by non-digit
pattern6 = r"W[d]+W"
arr = re.sub(pattern5, '.', arr)
arr = re.sub(pattern6, '', arr)
pattern1 = r"d{5,}" # remove long numbers
arr = re.sub(pattern1, '', arr)
return arr

当使用.apply-直接在我的较小测试数据帧中的相应列上运行时,它会返回预期的结果,并清除文本。

然而,我需要将其应用于更大的数据帧,并希望尝试使用多处理包来加快速度。

我用过:

import multiprocessing as mp
with mp.Pool() as pool:
df_t["Text"] = pool.map(pre_process,df_t["Text"])

我已经成功地使用内置函数对同一数据帧进行了多处理,但当使用自定义函数运行时,什么都不会发生。内核刚刚冻结。我也尝试了pool.apply((,但没有结果。

这可能是我的函数有问题,还是我以错误的方式实现了多处理?

我尝试在这里应用这些建议:多处理。Pool:何时使用apply、apply_async或map?但没有变化。

我认为您的代码没有任何问题。事实上,我能够在本地机器上运行它,而不会在伪pandasDataFrame上出现问题。不过,我对这个问题的潜在原因有一些想法。我之前在PyCharm 2019上使用python 3.7的multiprocessing包出现了问题。我通过降级到PyCharm 2018和python 3.6来解决这个问题。我在一个伪DataFrame上用这个配置运行了您的代码,没有任何问题。

你可以查看这个关于这个问题的链接(当然,如果我的猜测是真的(

相关内容

  • 没有找到相关文章

最新更新