diff options
author | Lesmiscore <nao20010128@gmail.com> | 2022-02-25 13:22:17 +0900 |
---|---|---|
committer | Lesmiscore <nao20010128@gmail.com> | 2022-02-25 13:22:17 +0900 |
commit | f0734e1190630f4cefa4a2028884413f54310f82 (patch) | |
tree | 0132414327313f2a394e61111da56fd61e442cf9 /yt_dlp/downloader/fragment.py | |
parent | 15dfb3929c3eaca897c85dc1ad792df3fbf5ebc7 (diff) | |
download | hypervideo-pre-f0734e1190630f4cefa4a2028884413f54310f82.tar.lz hypervideo-pre-f0734e1190630f4cefa4a2028884413f54310f82.tar.xz hypervideo-pre-f0734e1190630f4cefa4a2028884413f54310f82.zip |
[downloader/fragment] Fix problem where multiple threads can share one iterator
which causes "ValueError: generator already executing" error
Closes #2881
Diffstat (limited to 'yt_dlp/downloader/fragment.py')
-rw-r--r-- | yt_dlp/downloader/fragment.py | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/yt_dlp/downloader/fragment.py b/yt_dlp/downloader/fragment.py index 082581b54..7b213cd5f 100644 --- a/yt_dlp/downloader/fragment.py +++ b/yt_dlp/downloader/fragment.py @@ -410,17 +410,16 @@ class FragmentFD(FileDownloader): def bindoj_result(future): return future.result() + def interrupt_trigger_iter(fg): + for f in fg: + if not interrupt_trigger[0]: + break + yield f + spins = [] for idx, (ctx, fragments, info_dict) in enumerate(args): tpe = FTPE(math.ceil(max_workers / max_progress)) - - def interrupt_trigger_iter(): - for f in fragments: - if not interrupt_trigger[0]: - break - yield f - - job = tpe.submit(thread_func, idx, ctx, interrupt_trigger_iter(), info_dict, tpe) + job = tpe.submit(thread_func, idx, ctx, interrupt_trigger_iter(fragments), info_dict, tpe) spins.append((tpe, job)) result = True |