【Python】OSError: handle is closed / EOFError: Ran out of input

【问题描述】

       今天在使用Python多进程管道(multiprocessing.Pipe)的时候报了如下的错误:

Traceback (most recent call last):
  File "script/train_taobao.py", line 302, in <module>
    train(model_type=Model_Type, Memory_Size=Memory_Size, Mem_Induction=Mem_Induction, Util_Reg=Util_Reg)
  File "script/train_taobao.py", line 194, in train
    if _stop.is_set() and train_data_pool.empty():
  File "D:\anaconda\lib\multiprocessing\queues.py", line 120, in empty
    return not self._poll()
  File "D:\anaconda\lib\multiprocessing\connection.py", line 255, in poll
    self._check_closed()
  File "D:\anaconda\lib\multiprocessing\connection.py", line 136, in _check_closed
    raise OSError("handle is closed")
OSError: handle is closed

(base) D:\PythonProjects\project_nlp\mimn>Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "D:\anaconda\lib\multiprocessing\spawn.py", line 105, in spawn_main
    exitcode = _main(fd)
  File "D:\anaconda\lib\multiprocessing\spawn.py", line 115, in _main
    self = reduction.pickle.load(from_parent)
EOFError: Ran out of input

【相关原因分析】

       下面来说一下Python多进程管道的几种常见报错。

       1、如果管道发送端关闭了,接收端依然还去接收的话,接收端会在接收完管道中残存的数据之后,报如下错误:

raise EOFError

       2、如果管道中没有数据了,接收端还去接收的话,程序会卡死不动。

       3、如果管道发送端关闭了,发送端依然还去发送的话,就会报如下的错误:

OSError: handle is closed

       也就是咱们上文中报的错。

       4、如果接收端关闭了,发送端依然发送的话,会报如下的错误:

BrokenPipeError: [WinError 232] 管道正在被关闭。

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

象在舞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值