BrokenPipeError:[Errno 32]管道损坏当使用multiprocessing.Process并调用process.start时,出现此错误怎么解决呢?

问题描述

我正在尝试使我的代码通过多处理工作,以缩短我的代码的执行时间。但是在使用multiprocessing.Process(...)函数创建了一个进程之后,我调用了start()函数以启动我创建的该进程,但是我收到以下错误消息:

BrokenPipeError:[Errno 32]管道损坏

请注意,我使用KFold()以4种不同的方式分离数据集,以对模型执行交叉验证。

这是我的代码:

def cross_validation():
    w = initialization_of_parameters(7)
    x,y = get_dataset_celiac(7)
    x,y = shuffle(x,y)
    x_train,x_test,y_train,y_test = [],[],[]
    kf = KFold(n_splits=4)
    for train_index,test_index in kf.split(x):
        x_train.append(x[train_index])
        x_test.append(x[test_index])
        y_train.append(y[train_index])
        y_test.append(y[test_index])

    p1 = Process(target=train,args=(w,10,0.01,0.5,x_train[0],y_train[0],x_test[0],y_test[0],))
    p2 = Process(target=train,x_train[1],y_train[1],x_test[1],y_test[1],))
    p3 = Process(target=train,x_train[2],y_train[2],x_test[2],y_test[2],))
    p4 = Process(target=train,x_train[3],y_train[3],x_test[3],y_test[3],))
    p1.start()
    p2.start()
    p3.start()
    p4.start()
    p1.join()
    p2.join()
    p3.join()
    p4.join()


def main():
    cross_validation()

if __name__ == "__main__":
    main()

这是我的错误:

---------------------------------------------------------------------------
BrokenPipeError                           Traceback (most recent call last)
<ipython-input-1-7b3adfb29bf6> in <module>
    170 
    171 if __name__ == "__main__":
--> 172     main()

<ipython-input-1-7b3adfb29bf6> in main()
    167 
    168 def main():
--> 169     cross_validation()
    170 
    171 if __name__ == "__main__":

<ipython-input-1-7b3adfb29bf6> in cross_validation()
    156     p3 = Process(target=train,))
    157     p4 = Process(target=train,))
--> 158     p1.start()
    159     p2.start()
    160     p3.start()

~\anaconda3\lib\multiprocessing\process.py in start(self)
    110                'daemonic processes are not allowed to have children'
    111         _cleanup()
--> 112         self._popen = self._Popen(self)
    113         self._sentinel = self._popen.sentinel
    114         # Avoid a refcycle if the target function holds an indirect

~\anaconda3\lib\multiprocessing\context.py in _Popen(process_obj)
    221     @staticmethod
    222     def _Popen(process_obj):
--> 223         return _default_context.get_context().Process._Popen(process_obj)
    224 
    225 class DefaultContext(BaseContext):

~\anaconda3\lib\multiprocessing\context.py in _Popen(process_obj)
    320         def _Popen(process_obj):
    321             from .popen_spawn_win32 import Popen
--> 322             return Popen(process_obj)
    323 
    324     class SpawnContext(BaseContext):

~\anaconda3\lib\multiprocessing\popen_spawn_win32.py in __init__(self,process_obj)
     87             try:
     88                 reduction.dump(prep_data,to_child)
---> 89                 reduction.dump(process_obj,to_child)
     90             finally:
     91                 set_spawning_popen(None)

~\anaconda3\lib\multiprocessing\reduction.py in dump(obj,file,protocol)
     58 def dump(obj,protocol=None):
     59     '''Replacement for pickle.dump() using ForkingPickler.'''
---> 60     ForkingPickler(file,protocol).dump(obj)
     61 
     62 #

BrokenPipeError: [Errno 32] Broken pipe

请注意,我正在使用jupyter笔记本,并且我的计算机具有4核,如果有帮助的话,可以使用8GB的ram。如果缺少任何信息,请告诉我。

请问有人有解决这个问题的想法吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...