簡體   English   中英

致命的 Python 錯誤:在解釋器關閉時無法獲取 <_io.BufferedReader name=8> 的鎖定,可能是由於守護線程

[英]Fatal Python error: could not acquire lock for <_io.BufferedReader name=8> at interpreter shutdown, possibly due to daemon threads

運行以下:

import imageio

class vidrdf:
    def __init__(self, vidfile):
        self.vid = imageio.get_reader(vidfile,  'ffmpeg')

vidfile = 'movie.mov'
rdfobj = vidrdf(vidfile)

我得到:

Fatal Python error: could not acquire lock for <_io.BufferedReader name=8> at interpreter shutdown, possibly due to daemon threads

Thread 0x00007fd2dc2a8700 (most recent call first):
  File “/path/miniconda3/envs/flower/lib/python3.7/site-packages/imageio_ffmpeg/_parsing.py", line 61 in run
  File "miniconda3/envs/flower/lib/python3.7/threading.py", line 926 in _bootstrap_inner
  File “/path/miniconda3/envs/flower/lib/python3.7/threading.py", line 890 in _bootstrap

Current thread 0x00007fd2f0bb9700 (most recent call first):
  File “/path/miniconda3/envs/flower/lib/python3.7/subprocess.py", line 1704 in _communicate
  File “/path/miniconda3/envs/flower/lib/python3.7/subprocess.py", line 939 in communicate
  File “/path/miniconda3/envs/flower/lib/python3.7/site-packages/imageio_ffmpeg/_io.py", line 193 in read_frames
  File “/path/miniconda3/envs/flower/lib/python3.7/site-packages/imageio/plugins/ffmpeg.py", line 342 in _close
  File “/path/miniconda3/envs/flower/lib/python3.7/site-packages/imageio/core/format.py", line 252 in close
  File “/path/miniconda3/envs/flower/lib/python3.7/site-packages/imageio/core/format.py", line 241 in __del__
Aborted (core dumped)

如果我嘗試,它不會發生:

import imageio

class vidrdf:
    def __init__(self, vidfile):
        self.vid = imageio.get_reader(vidfile,  'ffmpeg')

vidfile = 'movie.mov'
vidrdf(vidfile)

或者

import imageio

class vidrdf:
    def __init__(self, vidfile):
        vid = imageio.get_reader(vidfile,  'ffmpeg')

vidfile = 'movie.mov'
rdfobj = vidrdf(vidfile)

所以這顯然是復制 object 的問題。 我搜索了守護線程,但由於我直接使用 imageio,我無法弄清楚為什么以及如何解決它。 我將不勝感激任何建議。

以下似乎有效,雖然我不知道為什么:

import imageio
import copy

class vidrdf:
    def __init__(self, vidfile):
        vid = imageio.get_reader(vidfile,  'ffmpeg')
        self.vid = copy.copy(vid)


vidfile = 'movie.mov'
rdfobj = vidrdf(vidfile)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM