You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

spacy调用nlp.pipe多进程处理时报RuntimeError冻结问题如何解决?

问题触发诱因

报错核心原因是你调用nlp.pipe时指定了n_process=-1开启多进程处理,Windows、macOS系统默认的多进程启动方式为spawn而非Linux默认的fork:
spawn模式下新启动的子进程会重新导入整个主模块的代码,若启动多进程的逻辑没有被if __name__ == '__main__'保护块包裹,子进程导入代码时会再次执行到启动多进程的逻辑,陷入无限递归启动新进程的循环,因此触发该运行时错误。

排查步骤
  • 确认运行环境是否为Windows/macOS,只有默认使用spawn启动多进程的系统会出现该问题
  • 检查开启多进程的代码(本次为nlp.pipe指定n_process=-1的逻辑)是否未放在if __name__ == '__main__'块中
  • 额外注意原代码中>是HTML转义字符,属于输入错误,实际编写时需替换为>,否则会先触发语法错误
修复方案

有两种可行修复方式:

方案1:保留多进程加速

将所有主执行逻辑放入if __name__ == '__main__'保护块中,避免子进程重复执行多进程启动代码,修复后代码如下:

import pandas as pd
import spacy

def trata_textos(doc):
   tokens_validos = []
   for token in doc:
      e_valido = not token.is_stop and token.is_alpha
      if e_valido:
         tokens_validos.append(token.text)
      if len(tokens_validos) > 2:
         return ' '.join(tokens_validos)

if __name__ == '__main__':
    dados = pd.read_csv('treino.csv')
    nlp = spacy.load('pt_core_news_sm')
    textos_para_tratamento = (titulos.lower() for titulos in dados['title'])
    textos_tratados = [trata_textos(doc) for doc in nlp.pipe(textos_para_tratamento,
                                                      batch_size= 1000,
                                                      n_process = -1)]

方案2:关闭多进程

若数据量不大不需要多进程加速,直接将nlp.pipe的n_process参数改为1,无需添加保护块即可直接运行。


内容的提问来源于stack exchange,提问作者Marco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 10:36:03