问题描述:
moviepy报错
Exception ignored in: <function _ProactorBasePipeTransport.__del__ at 0x000002525F97F160>
Traceback (most recent call last):
File "C:\Users\......\pyevn\lib\asyncio\proactor_events.py", line 116, in __del__
self.close()
File "C:\Users\......\pyevn\lib\asyncio\proactor_events.py", line 108, in close
self._loop.call_soon(self._call_connection_lost, None)
File "C:\Users\......\pyevn\lib\asyncio\base_events.py", line 719, in call_soon
self._check_closed()
File "C:\Users\......\pyevn\lib\asyncio\base_events.py", line 508, in _check_closed
raise RuntimeError('Event loop is closed')
RuntimeError: Event loop is closed
解决办法
修改moviepy包C:\Users\......\Lib\site-packages\moviepy\video\io\ffmpeg_reader.py
文件的def close(self)
原来的代码
def close(self):
if self.proc:
self.proc.terminate()
self.proc.stdout.close()
self.proc.stderr.close()
self.proc.wait()
self.proc = None
if hasattr(self, 'lastread'):
del self.lastread
def __del__(self):
self.close()
修改后
def close(self):
if self.proc:
if self.proc.returncode is None: # 如果子进程还没有结束
try:
self.proc.terminate() # 终止子进程
self.proc.wait(timeout=0.1) # 等待子进程结束,超时时间设置为0.1秒
except OSError:
pass # 忽略可能出现的异常
self.proc.stdout.close() # 关闭标准输出文件描述符
self.proc.stderr.close() # 关闭标准错误文件描述符
self.proc = None # 将进程对象设置为None,表示已经结束
if hasattr(self, 'lastread'):
del self.lastread # 删除lastread属性
def __del__(self):
self.close()