在Python 3.7中使用自定义函数进行多重处理的问题

问题描述 投票:0回答:1

我创建了一个自定义函数来通过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 "\n\n" in arr: # removes unnecessary new lines
        arr = arr.replace("\n\n", "\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(),但没有结果。

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

我尝试在此处应用建议:multiprocessing.Pool: When to use apply, apply_async or map?但没有变化。

python pandas multiprocessing python-3.7
1个回答
0
投票

我看不到您的代码有任何问题。实际上,我可以在本地计算机上运行它,而在虚拟pandas DataFrame上没有问题。我对问题的潜在原因有一些想法。我之前在PyCharm 2019上使用python 3.7的multiprocessing包遇到问题。我通过降级到PyCharm 2018和python 3.6解决了该问题。我在虚拟DataFrame上使用此配置运行了您的代码,没有任何问题。

您可以检查有关问题的link(如果我的猜测当然是正确的,]

© www.soinside.com 2019 - 2024. All rights reserved.