序列图变换 - Python SGT 多处理中的错误

Posted

技术标签:

【中文标题】序列图变换 - Python SGT 多处理中的错误【英文标题】:Sequence Graph Transform - Error in Python SGT multiprocessing 【发布时间】:2020-08-15 00:48:26 【问题描述】:

我在 Anaonda 发行版下的 Jupyter 中使用 python3 并使用 sgt 包 2.0.3。系统 - 64 位 8GB。 SGT 函数在我不使用多处理时工作正常,但在我使用多处理时会引发错误。如果有任何系统依赖项来使用多处理功能,您能帮我吗?

from sgt import SGT
import numpy as np
import pandas as pd
import pandarallel

corpus = pd.DataFrame([[1, ["B","B","A","C","A","C","A","A","B","A"]], 
                   [2, ["C", "Z", "Z", "Z", "D"]]], 
                  columns=['id', 'sequence'])
sgt = SGT(kappa=1, 
      flatten=True, 
      lengthsensitive=False, 
      mode='default')
sgt.fit_transform(corpus)

但是,当我运行 mode='multiprocessing' 时,它会引发以下错误

sgt = SGT(kappa=1, 
      flatten=True, 
      lengthsensitive=False,
      mode='multiprocessing')
sgt.fit_transform(corpus)

输出:

信息:Pandarallel 将运行 7 名工人。 信息:Pandarallel 将使用标准的多处理数据传输(管道)在主进程和工作进程之间传输数据。 -------------------------------------------------- ------------------------- AttributeError Traceback(最近一次调用最后一次) 在 3 长度敏感=假, 4 模式='多处理') ----> 5 sgt.fit_transform(语料库) ~\AppData\Local\Continuum\anaconda3\lib\site-packages\sgt\sgt.py in fit_transform(self, corpus) 214 列表(self.fit(x['sequence'])), 215轴=1, --> 216 结果类型='展开') 217 sgt.columns = ['id'] + self.feature_names 218返回中士 ~\AppData\Local\Continuum\anaconda3\lib\site-packages\pandarallel\pandarallel.py 在闭包中(数据,函数,*args,**kwargs) 440 尝试: 第441章 --> 442 nb_workers, worker_init, (prepare_worker(use_memory_fs)(worker),), 第443章) 444 ~\AppData\Local\Continuum\anaconda3\lib\multiprocessing\context.py in Pool(self, processes, initializer, initargs, maxtasksperchild) 117 从 .pool 导入池 118 返回池(进程,初始化程序,initargs,maxtasksperchild, --> 119 上下文=self.get_context()) 120 第121章 ~\AppData\Local\Continuum\anaconda3\lib\multiprocessing\pool.py in __init__(self, processes, initializer, initargs, maxtasksperchild, context) 第174章 第175章 --> 176 self._repopulate_pool() 177 178 self._worker_handler = threading.Thread( ~\AppData\Local\Continuum\anaconda3\lib\multiprocessing\pool.py 在 _repopulate_pool(self) 239 w.name = w.name.replace('进程','PoolWorker') 240 w.daemon =真 --> 241 w.start() 第242章 243 ~\AppData\Local\Continuum\anaconda3\lib\multiprocessing\process.py 在 start(self) 110 '守护进程不允许有孩子' 第111章 --> 112 self._popen = self._Popen(self) 113 自我._sentinel = self._popen.sentinel 114 # 如果目标函数持有一个间接函数,则避免一个 refcycle ~\AppData\Local\Continuum\anaconda3\lib\multiprocessing\context.py 在 _Popen(process_obj) 第320章 321 从 .popen_spawn_win32 导入 Popen --> 322 返回 Popen(process_obj) 323 324 类 SpawnContext(BaseContext): ~\AppData\Local\Continuum\anaconda3\lib\multiprocessing\popen_spawn_win32.py in __init__(self, process_obj) 87 尝试: 88减少.dump(prep_data,to_child) ---> 89 reduction.dump(process_obj, to_child) 90终于: 91 set_spawning_popen(无) ~\AppData\Local\Continuum\anaconda3\lib\multiprocessing\reduction.py 在转储(obj,文件,协议) 58 def转储(obj,文件,协议=无): 59 '''使用 ForkingPickler 替换 pickle.dump()。''' ---> 60 ForkingPickler(文件,协议).dump(obj) 61 62# AttributeError:无法腌制本地对象'prepare_worker..closure..wrapper'

【问题讨论】:

在此处获得答案的最佳方法是在 github 存储库中创建问题。 github.com/cran2367/sgt/issues 【参考方案1】:

这可能是由于pandas 版本。检查您的 pandas 版本是否为 1.x。如果没有,请升级您的 pandas 版本。

$ pip install pandas --upgrade

【讨论】:

是的,pandas 是旧版本。我升级到 1.0.3 但同样的问题仍然存在。升级时,虽然我收到了一些关于 pip 版本的警告(当前在我的系统 19.0.3 中) - 这可能是原因吗? pip 版本不太可能是问题,但您仍然可以尝试。确保您使用的 anaconda python 环境具有更新的 pandas。使用 pip install 有时会将库安装在本地 python 环境中,而不是 anaconda。你可以改用conda install。另外,你的 pandarallel 版本是什么? 我尝试了所有升级选项 - 使用 conda install、pip 升级、numpy 升级、导入 pickle 升级 pandas。问题仍然存在。我有 pandarallel 1.4.8 - 它应该是我几天前刚刚安装的最新版本。我不是 python 专家,所以做了一些谷歌搜索,发现了一个非常相关的线程 link 不确定它是否有帮助。到目前为止,我将继续探索不使用多处理的 SGT 包。

以上是关于序列图变换 - Python SGT 多处理中的错误的主要内容,如果未能解决你的问题,请参考以下文章

MRI多序列,多中心数据集预处理--使用FSL-Flirt 配准数据

BZOJ1562jzyzOJ1730COGS409NOI2009变换序列 二分图匹配

数字信号处理序列傅里叶变换 ( 序列傅里叶变换与反变换 | 序列绝对可和 与 存在傅里叶变换之间的关系 | 序列傅里叶变换性质 )

数字信号处理序列傅里叶变换 ( 序列傅里叶变换与反变换 | 序列绝对可和 与 存在傅里叶变换之间的关系 | 序列傅里叶变换性质 )

OpenCV-Python教程:形态学变换~腐蚀和膨胀(erode,dilate)

计算机图像处理之形状变换