aboutsummaryrefslogtreecommitdiffstats
path: root/yt_dlp/downloader/fragment.py
diff options
context:
space:
mode:
authorLesmiscore <nao20010128@gmail.com>2022-02-25 13:22:17 +0900
committerLesmiscore <nao20010128@gmail.com>2022-02-25 13:22:17 +0900
commitf0734e1190630f4cefa4a2028884413f54310f82 (patch)
tree0132414327313f2a394e61111da56fd61e442cf9 /yt_dlp/downloader/fragment.py
parent15dfb3929c3eaca897c85dc1ad792df3fbf5ebc7 (diff)
downloadhypervideo-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.py15
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