mirror of
https://cdm-project.com/Download-Tools/devine.git
synced 2025-04-29 19:14:28 +02:00
feat(dl): Add *new* --workers to set download threads/workers
The previously named --workers which is now --downloads specified how many tracks to download, not how many threads/workers are used per-download. It defaults to nothing, which each downloader then has their own defaults. All current downloaders though currently default to `min(32, (os.cpu_count() or 1) + 4)`, which is also the default for `ThreadPoolExecutor` in general. This also brings a side effect of changing DASH and HLS's forced max_workers of 16 to now a more appropriate default but more importantly actually configurable. You can set a default in your config under `dl.workers`.
This commit is contained in:
parent
0cf20f84a9
commit
10285c3819
@ -153,6 +153,13 @@ For example to set the default primary language to download to German,
|
|||||||
lang: de
|
lang: de
|
||||||
```
|
```
|
||||||
|
|
||||||
|
to set how many tracks to download concurrently to 4 and download threads to 16,
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
downloads: 4
|
||||||
|
workers: 16
|
||||||
|
```
|
||||||
|
|
||||||
to set `--bitrate=CVBR` for the AMZN service,
|
to set `--bitrate=CVBR` for the AMZN service,
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
|
@ -131,6 +131,8 @@ class dl:
|
|||||||
help="Disable folder creation for TV Shows.")
|
help="Disable folder creation for TV Shows.")
|
||||||
@click.option("--no-source", is_flag=True, default=False,
|
@click.option("--no-source", is_flag=True, default=False,
|
||||||
help="Disable the source tag from the output file name and path.")
|
help="Disable the source tag from the output file name and path.")
|
||||||
|
@click.option("--workers", type=int, default=None,
|
||||||
|
help="Max workers/threads to download with per-track. Default depends on the downloader.")
|
||||||
@click.option("--downloads", type=int, default=1,
|
@click.option("--downloads", type=int, default=1,
|
||||||
help="Amount of tracks to download concurrently.")
|
help="Amount of tracks to download concurrently.")
|
||||||
@click.pass_context
|
@click.pass_context
|
||||||
@ -275,6 +277,7 @@ class dl:
|
|||||||
no_proxy: bool,
|
no_proxy: bool,
|
||||||
no_folder: bool,
|
no_folder: bool,
|
||||||
no_source: bool,
|
no_source: bool,
|
||||||
|
workers: Optional[int],
|
||||||
downloads: int,
|
downloads: int,
|
||||||
*_: Any,
|
*_: Any,
|
||||||
**__: Any
|
**__: Any
|
||||||
@ -528,6 +531,7 @@ class dl:
|
|||||||
vaults_only=vaults_only,
|
vaults_only=vaults_only,
|
||||||
export=export
|
export=export
|
||||||
),
|
),
|
||||||
|
max_workers=workers,
|
||||||
progress=tracks_progress_callables[i]
|
progress=tracks_progress_callables[i]
|
||||||
)
|
)
|
||||||
for i, track in enumerate(title.tracks)
|
for i, track in enumerate(title.tracks)
|
||||||
|
@ -236,6 +236,7 @@ class DASH:
|
|||||||
progress: partial,
|
progress: partial,
|
||||||
session: Optional[Session] = None,
|
session: Optional[Session] = None,
|
||||||
proxy: Optional[str] = None,
|
proxy: Optional[str] = None,
|
||||||
|
max_workers: Optional[int] = None,
|
||||||
license_widevine: Optional[Callable] = None
|
license_widevine: Optional[Callable] = None
|
||||||
):
|
):
|
||||||
if not session:
|
if not session:
|
||||||
@ -472,7 +473,7 @@ class DASH:
|
|||||||
headers=session.headers,
|
headers=session.headers,
|
||||||
cookies=session.cookies,
|
cookies=session.cookies,
|
||||||
proxy=proxy,
|
proxy=proxy,
|
||||||
max_workers=16
|
max_workers=max_workers
|
||||||
):
|
):
|
||||||
file_downloaded = status_update.get("file_downloaded")
|
file_downloaded = status_update.get("file_downloaded")
|
||||||
if file_downloaded:
|
if file_downloaded:
|
||||||
|
@ -197,6 +197,7 @@ class HLS:
|
|||||||
progress: partial,
|
progress: partial,
|
||||||
session: Optional[Session] = None,
|
session: Optional[Session] = None,
|
||||||
proxy: Optional[str] = None,
|
proxy: Optional[str] = None,
|
||||||
|
max_workers: Optional[int] = None,
|
||||||
license_widevine: Optional[Callable] = None
|
license_widevine: Optional[Callable] = None
|
||||||
) -> None:
|
) -> None:
|
||||||
if not session:
|
if not session:
|
||||||
@ -280,7 +281,7 @@ class HLS:
|
|||||||
headers=session.headers,
|
headers=session.headers,
|
||||||
cookies=session.cookies,
|
cookies=session.cookies,
|
||||||
proxy=proxy,
|
proxy=proxy,
|
||||||
max_workers=16
|
max_workers=max_workers
|
||||||
):
|
):
|
||||||
file_downloaded = status_update.get("file_downloaded")
|
file_downloaded = status_update.get("file_downloaded")
|
||||||
if file_downloaded:
|
if file_downloaded:
|
||||||
|
@ -153,9 +153,10 @@ class Subtitle(Track):
|
|||||||
self,
|
self,
|
||||||
session: requests.Session,
|
session: requests.Session,
|
||||||
prepare_drm: partial,
|
prepare_drm: partial,
|
||||||
|
max_workers: Optional[int] = None,
|
||||||
progress: Optional[partial] = None
|
progress: Optional[partial] = None
|
||||||
):
|
):
|
||||||
super().download(session, prepare_drm, progress)
|
super().download(session, prepare_drm, max_workers, progress)
|
||||||
if not self.path:
|
if not self.path:
|
||||||
return
|
return
|
||||||
|
|
||||||
|
@ -135,6 +135,7 @@ class Track:
|
|||||||
self,
|
self,
|
||||||
session: Session,
|
session: Session,
|
||||||
prepare_drm: partial,
|
prepare_drm: partial,
|
||||||
|
max_workers: Optional[int] = None,
|
||||||
progress: Optional[partial] = None
|
progress: Optional[partial] = None
|
||||||
):
|
):
|
||||||
"""Download and optionally Decrypt this Track."""
|
"""Download and optionally Decrypt this Track."""
|
||||||
@ -191,6 +192,7 @@ class Track:
|
|||||||
progress=progress,
|
progress=progress,
|
||||||
session=session,
|
session=session,
|
||||||
proxy=proxy,
|
proxy=proxy,
|
||||||
|
max_workers=max_workers,
|
||||||
license_widevine=prepare_drm
|
license_widevine=prepare_drm
|
||||||
)
|
)
|
||||||
elif self.descriptor == self.Descriptor.DASH:
|
elif self.descriptor == self.Descriptor.DASH:
|
||||||
@ -201,6 +203,7 @@ class Track:
|
|||||||
progress=progress,
|
progress=progress,
|
||||||
session=session,
|
session=session,
|
||||||
proxy=proxy,
|
proxy=proxy,
|
||||||
|
max_workers=max_workers,
|
||||||
license_widevine=prepare_drm
|
license_widevine=prepare_drm
|
||||||
)
|
)
|
||||||
elif self.descriptor == self.Descriptor.URL:
|
elif self.descriptor == self.Descriptor.URL:
|
||||||
@ -236,7 +239,8 @@ class Track:
|
|||||||
filename=save_path.name,
|
filename=save_path.name,
|
||||||
headers=session.headers,
|
headers=session.headers,
|
||||||
cookies=session.cookies,
|
cookies=session.cookies,
|
||||||
proxy=proxy
|
proxy=proxy,
|
||||||
|
max_workers=max_workers
|
||||||
):
|
):
|
||||||
file_downloaded = status_update.get("file_downloaded")
|
file_downloaded = status_update.get("file_downloaded")
|
||||||
if not file_downloaded:
|
if not file_downloaded:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user