【问题标题】:Function not returning in multiprocess, no errors函数在多进程中没有返回,没有错误
【发布时间】:2020-07-21 18:31:17
【问题描述】:

我正在使用 Pool 运行多个进程

import spacy
import multiprocessing
import logging

# global variable
nlp_bert = spacy.load("en_trf_bertbaseuncased_lg")
logging.basicConfig(level=logging.DEBUG)


def job_pool(data, job_number, job_to_do, groupby=None, split_col=None, **kwargs):
    pool = multiprocessing.Pool(processes=job_number)
    jobs = pool.map(job_to_do, data)
    return jobs


def job(slice):
    logging.debug('this shows')
    w1 = nlp_bert('word')
    w2 = nlp_bert('other')
    logging.debug(w1.similarity(w2))
    logging.debug("this doesn't")


job_pool([1, 2, 3, 4], 4, job)

nlp_bert 函数不返回任何内容,也没有错误。我怎样才能找出问题所在?我已经将日志记录设置为调试级别。

该函数在多进程之外工作 - 即只需将其写入脚本并运行以下内容。

import spacy
nlp_bert = spacy.load("en_trf_bertbaseuncased_lg")
w1 = nlp_bert('word')
w2 = nlp_bert('other')
print(w1.similarity(w2))

0.8381155446247196

我正在使用:

  • Python 3.8.2
  • spacy 版本:2.3.2

【问题讨论】:

标签: python spacy multiprocess


【解决方案1】:

事实证明这是 pytorch 在子进程中运行多线程的一个已知问题,导致死锁。

https://github.com/explosion/spaCy/issues/4667

一种解决方法是添加以下内容:

import torch

torch.set_num_threads(1)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多