簡體   English   中英

在 Python 3.7 中使用帶有多處理的自定義 function 的問題

[英]Problem with using custom function with multiprocessing in Python 3.7

我創建了一個自定義 function 以通過 Python 3.7 中的正則表達式清理大文本正文。 我正在使用 jupyter notebook 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

當在我的較小測試 dataframe 中的相應列上直接使用.apply 運行時 - 它返回我預期的結果並且文本被清除。

但是,我需要將其應用於更大的 dataframe 並想嘗試使用多處理 package 來加快速度。

我用了:

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

我已經在同一個 dataframe 上成功使用了多處理,但是當使用我的自定義 function 運行時,沒有任何反應。 Kernel 只是凍結。 我也嘗試了 pool.apply() 沒有結果。

這可能是我的 function 的問題,還是我以錯誤的方式實現多處理?

我嘗試在這里應用建議: multiprocessing.Pool: When to use apply, apply_async or map? 但沒有變化。

我認為您的代碼沒有任何問題。 事實上,我能夠在我的本地機器上在虛擬pandas DataFrame 上毫無問題地運行它。 我對問題的潛在原因有一些想法。 我之前在 PyCharm 2019 上使用 python 3.7 的multiprocessing package 遇到問題。 我通過降級到 PyCharm 2018 和 python 3.6 解決了這個問題。 我在虛擬 DataFrame 上使用此配置運行您的代碼,沒有任何問題。

您可以查看有關該問題的此鏈接(如果我的猜測當然是真的)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM